Название: Изменение стиля QHeaderView в QTableWidget Отправлено: Dimas от Январь 17, 2012, 10:52 Меняю стиль прорисовки таблицы в дизайнере с помощью правки стилей в "Edit Style Sheet".
Пред просмотром (CTRL + ALT + R) получается как мне нужно: (http://i29.fastpic.ru/big/2012/0117/47/1f61340d9f348f6d2019f9b40ea3b047.png) а, при запуске exe получается так: (http://i32.fastpic.ru/big/2012/0117/3d/e2ad76a7d62af2a37e8c4d088071a93d.png) Вот код стилей: Цитировать QTableWidget { background-color: rgb(0, 0, 139); gridline-color: rgb(0, 0, 139); alternate-background-color: rgb(255, 255, 255); } QTableWidget QTableCornerButton::section { background-color: rgba(0, 0, 139, 0); border: 1px outset rgb(0, 0, 139); } QHeaderView { background-color: rgb(0, 0, 139); } QHeaderView::section { background-color: rgb(0, 0, 139); color: rgb(255, 255, 255); padding-left: 4px; border:0px outset rgb(0, 0, 0); } Из-за чего может не правильно отображаться шапка таблицы? Тестовый проект прилагаю. QT 4.5.2. XP Название: Re: Изменение стиля QHeaderView в QTableWidget Отправлено: Bepec от Январь 17, 2012, 12:16 При запуске, насколько я понял, предпросмотра, используется Qt шное представление.
Когда же ты запускаешь программу, Qt берет оформление у данной системы(которая у тебя сейчас). Название: Re: Изменение стиля QHeaderView в QTableWidget Отправлено: Dimas от Январь 17, 2012, 12:58 Как решить эту проблему?
Название: Re: Изменение стиля QHeaderView в QTableWidget Отправлено: stima от Январь 17, 2012, 14:01 Код: QHeaderView { color: rgb(255, 255, 255), padding-left: 4px; } Название: Re: Изменение стиля QHeaderView в QTableWidget Отправлено: Dimas от Январь 17, 2012, 14:20 Код: QHeaderView { color: rgb(255, 255, 255), padding-left: 4px; } Ничего не изменилось. Так же левая колонка рисуется правильно, а верхняя строка (шапка) неправильно. Название: Re: Изменение стиля QHeaderView в QTableWidget Отправлено: stima от Январь 17, 2012, 15:24 Код: #include <QtGui/QApplication> Название: Re: Изменение стиля QHeaderView в QTableWidget Отправлено: Dimas от Январь 17, 2012, 21:24 Все заработало, если создаю колонки и строки после вызова setStyleSheet. При генерации файла ui_dialog.h из дизайнера setStyleSheet вызывается после создания колонок и строк.
Цитировать class Ui_Dialog { public: QTableWidget *tableWidget; void setupUi(QDialog *Dialog) { if (Dialog->objectName().isEmpty()) Dialog->setObjectName(QString::fromUtf8("Dialog")); Dialog->resize(385, 231); tableWidget = new QTableWidget(Dialog); if (tableWidget->columnCount() < 1) tableWidget->setColumnCount(1); QTableWidgetItem *__qtablewidgetitem = new QTableWidgetItem(); tableWidget->setHorizontalHeaderItem(0, __qtablewidgetitem); if (tableWidget->rowCount() < 1) tableWidget->setRowCount(1); QTableWidgetItem *__qtablewidgetitem1 = new QTableWidgetItem(); tableWidget->setVerticalHeaderItem(0, __qtablewidgetitem1); tableWidget->setObjectName(QString::fromUtf8("tableWidget")); tableWidget->setGeometry(QRect(8, 6, 349, 199)); tableWidget->setStyleSheet(QString::fromUtf8("QTableWidget { \n" "background: red; \n" "} \n" "QHeaderView { \n" "background: transparent; \n" "}\n" "QHeaderView::section { \n" "background: transparent; \n" "border: 1px solid black; \n" "};")); retranslateUi(Dialog); QMetaObject::connectSlotsByName(Dialog); } // setupUi void retranslateUi(QDialog *Dialog) { Dialog->setWindowTitle(QApplication::translate("Dialog", "Dialog", 0, QApplication::UnicodeUTF8)); QTableWidgetItem *___qtablewidgetitem = tableWidget->horizontalHeaderItem(0); ___qtablewidgetitem->setText(QApplication::translate("Dialog", "New Column", 0, QApplication::UnicodeUTF8)); QTableWidgetItem *___qtablewidgetitem1 = tableWidget->verticalHeaderItem(0); ___qtablewidgetitem1->setText(QApplication::translate("Dialog", "New Row", 0, QApplication::UnicodeUTF8)); Q_UNUSED(Dialog); } // retranslateUi }; В итоге создание строк и колонок перенес в конструктор диалога Цитировать #include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); if (ui->tableWidget->columnCount() < 1) ui->tableWidget->setColumnCount(1); QTableWidgetItem *__qtablewidgetitem = new QTableWidgetItem(); ui->tableWidget->setHorizontalHeaderItem(0, __qtablewidgetitem); if (ui->tableWidget->rowCount() < 1) ui->tableWidget->setRowCount(1); } Dialog::~Dialog() { delete ui; } Тестовый пример прилагаю. Спасибо всем за помощь. Название: Re: Изменение стиля QHeaderView в QTableWidget Отправлено: stima от Январь 17, 2012, 22:51 Не вьехал, а что нужно?)
п.с. Используй "являеться", а "не реализован по средствам" для ui. Намного облегчит жизнь. Название: Re: Изменение стиля QHeaderView в QTableWidget Отправлено: Dimas от Январь 17, 2012, 23:08 Я создал проект используя Creator. Потом в свойствах Edit Style Sheet изменил вид таблицы в Designer. Код в ui_dialog.h создан автоматически. Меня это устраивает. Дальше в коде Dialog.cpp я собирался наполнять таблицу данными. Что плохого в таком подходе?
Название: Re: Изменение стиля QHeaderView в QTableWidget Отправлено: stima от Январь 17, 2012, 23:36 Причем тут это, ты бы хоть погуглил о чем я.
Код: class MyWidget : public QWidget, public Ui_MyWidget { //является итого, приятней читать, причем это я считаю идеалогически правлиьным для ui Название: Re: Изменение стиля QHeaderView в QTableWidget Отправлено: Dimas от Январь 18, 2012, 06:46 Согласен, удобней читать.
Но, при создании Creator`ом каркас класса имеет вид: Цитировать #ifndef DIALOG_H #define DIALOG_H #include <QtGui/QDialog> namespace Ui { class Dialog; } class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = 0); ~Dialog(); private: Ui::Dialog *ui; }; #endif // DIALOG_H Цитировать #include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); } Dialog::~Dialog() { delete ui; } Я всего лишь добавил код в конструктор. Название: Re: Изменение стиля QHeaderView в QTableWidget Отправлено: kambala от Январь 18, 2012, 12:39 итого, приятней читать, причем это я считаю идеалогически правлиьным для ui не согласен. когда количество переменных в классе разрастается (тем более не всегда все элементы интерфейса рисуются в дизайнере), вспоминать как там что называется не очень удобно, а так написал ui. - и среда подсказала тебе.Но, при создании Creator`ом каркас класса имеет вид: это можно изменить в настройках (вкладка Дизайнер)Название: Re: Изменение стиля QHeaderView в QTableWidget Отправлено: andrew.k от Январь 18, 2012, 12:49 итого, приятней читать, причем это я считаю идеалогически правлиьным для ui не согласен. когда количество переменных в классе разрастается (тем более не всегда все элементы интерфейса рисуются в дизайнере), вспоминать как там что называется не очень удобно, а так написал ui. - и среда подсказала тебе.Но, при создании Creator`ом каркас класса имеет вид: это можно изменить в настройках (вкладка Дизайнер) |