Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: bosfor от Июня 17, 2011, 10:31



Название: QMainWidget раскраска сплитерных полосок между DockWidget
Отправлено: bosfor от Июня 17, 2011, 10:31
Отрисовал рисунок на QMainWidget теперь между Доквиджетовыми окнами просвечивается этот рисунок. Как можно изменить цвет сплитерных полосок ? Сделать их не прозрачными ?


Название: Re: QMainWidget раскраска сплитерных полосок между DockWidget
Отправлено: GreatSnake от Июня 17, 2011, 10:37
Настройка QMainWindow (http://doc.crossplatform.ru/qt/4.6.x/stylesheet-examples.html#customizing-qmainwindow).


Название: Re: QMainWidget раскраска сплитерных полосок между DockWidget
Отправлено: bosfor от Июня 17, 2011, 14:17
Применяю указанный стиль:
Код:
setStyleSheet("QMainWindow::separator { background: yellow; width: 10px;  height: 10px; } QMainWindow::separator:hover { background: red; }");
но применяется только размер а цвет по прежнему прозрачный ... ?


Название: Re: QMainWidget раскраска сплитерных полосок между DockWidget
Отправлено: bosfor от Июня 17, 2011, 15:44
Установка цвета сепаратора работает если я убираю рисунок заднего фона который делаю так:
Код:
void MainWindow::paintEvent(QPaintEvent *)
{
    QPixmap backgroundPixmap;
    backgroundPixmap.load(":/pictures/images/juju.png"); backgroundPixmap=backgroundPixmap.scaled(this->size().width(),size().height());
    QPainter painter;
     painter.begin(this);
     painter.drawPixmap(0, 0, backgroundPixmap);
     painter.end();
}

как быть в этом случае ?


Название: Re: QMainWidget раскраска сплитерных полосок между DockWidget
Отправлено: GreatSnake от Июня 17, 2011, 18:43
Мдя...
при каждой отрисовке, которая может быть делаться довольно часто, грузится файл картинки, потом из этого файла получается пиксмап, потом из этого пиксмапа получаем новый масштабированный.
К тому же своим MainWindow::paintEvent() ты вообще убиваешь отрисовку сплиттеров.
Вот работающее рещение:
Код
C++ (Qt)
#include <QApplication>
#include <QMainWindow>
#include <QDockWidget>
#include <QPainter>
#include <QPaintEvent>
 
class MainWindow : public QMainWindow
{
public:
MainWindow( const QString& fn, QWidget* p = 0 )
: QMainWindow( p )
{
bg_.load( fn );
br_.setTextureImage( bg_ );
}
 
protected:
 
bool event( QEvent* e )
{
if( e->type() == QEvent::Paint )
{
QPaintEvent* pe = static_cast< QPaintEvent* >( e );
QPainter p( this );
 
br_.setMatrix( QMatrix(
qreal( width() ) / qreal( bg_.width() ), 0, 0,
qreal( height() ) / qreal( bg_.height() ), 0, 0 ) );
p.setPen( Qt::NoPen );
p.setBrush( br_ );
p.drawRect( pe->rect() );
}
return QMainWindow::event( e );
}
private:
QImage bg_;
QBrush br_;
};
 
int main( int argc, char** argv )
{
QApplication app( argc, argv );
MainWindow mw( argc > 1 ? argv[1] : "" );
 
QDockWidget dw[4];
 
for( int i = 0; i < 4; i++ )
{
dw[i].setWindowTitle( QString( "Dock %1" ).arg( i + 1 ) );
mw.addDockWidget( Qt::DockWidgetArea( 1 << i ), &dw[i] );
}
 
QWidget w;
mw.setCentralWidget( &w );
 
mw.show();
 
return app.exec();
}
 

На вход собранной аппликухи дай любую картинку)


Название: Re: QMainWidget раскраска сплитерных полосок между DockWidget
Отправлено: daimon от Июня 17, 2011, 21:35
CSS (через дизайнер настроить) и всё


Название: Re: QMainWidget раскраска сплитерных полосок между DockWidget
Отправлено: GreatSnake от Июня 17, 2011, 22:44
CSS (через дизайнер настроить) и всё
Ну-ну. Вот возьми и настрой. И не забудь нам показать.


Название: Re: QMainWidget раскраска сплитерных полосок между DockWidget
Отправлено: daimon от Июня 19, 2011, 13:22
CSS (через дизайнер настроить) и всё
Ну-ну. Вот возьми и настрой. И не забудь нам показать.
если то, то вот http://www.prog.org.ru/index.php?topic=18403.msg123807#msg123807


Название: Re: QMainWidget раскраска сплитерных полосок между DockWidget
Отправлено: GreatSnake от Июня 19, 2011, 13:38
Нет не то. Читай сначала. Проблема в другом.


Название: Re: QMainWidget раскраска сплитерных полосок между DockWidget
Отправлено: bosfor от Июня 20, 2011, 13:32
Мдя...
...
На вход собранной аппликухи дай любую картинку)

Спасибо за предоставленное решение !