Перейти до основного вмісту

QTabBar

Спадкування в Qt це практично безмежне поле можливостей. Щоб не копатися в ісходниках минулих проектів в пошуках "я це колись робив і тепер хочу це сюди", вирішив розмістити кілька записів тут. Перший - QTabBar. Легкий переділ для швидкого проекту, сподіваюся він мені ще стане в нагоді.



#ifndef TABBAR_H
#define TABBAR_H
#include
#include
#include
#include
#include
#include

class TabBar : public QTabBar {
public:
    explicit TabBar(QWidget* parent=0) : QTabBar(parent){
        setIconSize(QSize(24, 24));
    }
protected:
    QSize tabSizeHint(int) const {
    return QSize(200, 60);
}
void paintEvent(QPaintEvent *){
    QStylePainter p(this);
    for (int index = 0; index < count(); index++){
       QStyleOptionTabV3 tab;
       initStyleOption(&tab, index);
       QIcon tempIcon = tab.icon;
       QString tempText = tab.text;
       tab.icon = QIcon();
       tab.text = QString();
       p.drawControl(QStyle::CE_TabBarTab, tab);
       QPainter painter;
       painter.begin(this);
       QRect tabrect = tabRect(index);
       tabrect.adjust(0, 8, 0, -8);
       painter.drawText(tabrect, Qt::AlignVCenter | Qt::AlignHCenter, tempText);
       tempIcon.paint(&painter, 0, tabrect.top(), tab.iconSize.width(),  tab.iconSize.height(), Qt::AlignTop | Qt::AlignHCenter);
       painter.end();
       }
    }
};
class TabWidget : public QTabWidget {
public:
    explicit TabWidget(QWidget *parent = 0) : QTabWidget(parent){
        setTabBar(new TabBar());
    }
};

#endif //TABBAR_H




Коментарі

Популярні дописи з цього блогу

Qt Округлення до певного розряду

Округлення - тривіальна задача в математиці, але в Qt немає функції округлення до певного розряду. Проте в QtMath є такі функції як qFloor (qreal) і QCeil (qreal), в результаті яких int. А також можна використовуючи round (double), отримати double. Дуже швидко я знайшов ось цей ресурс звідки взяв вихідну формулу. Вона без сумніву працює, але дає результати, які не відповідаю моїм очікуванням: toRound(187.156, 2); //187.15 toRound(187.156, 1); //187.1 toRound(187.156, 0); //187 toRound(187.156, -1); //180 toRound(187.156, -2); //100 Після невеликої корекції самої функції, її підсумковий варіант виглядає так: double wcsv::toRound(double val, int r) {   double outpValue;   double tempVal;   tempVal=val*pow(10,r);   if (double(int(tempVal))+0.5==tempVal){     int(tempVal)%2 == 0       ? outpValue=double(qFloor(tempVal))/pow(10,r)       :outpValue=d...

CSV в QTableWidget

Питання виникло в зв'язку з виниклою необхідністю прочитати .xls файл в Linux'і. Я так думаю у більшості користувачів Linux, є якийсь небудь офісний пакет, такий як OpenOffice або LibreOffice або щось там ще, за допомогою якого можна легко конвертувати .xls в .сsv. А .сsv - це текст, який можна читати в будь-якій системі. Пропоную читати файл у QTableWidget. Зберемо простеньку програму. Файл file_csv.csv виглядає так:   На форму покладемо QTableWidget, QListWidget, QPushButton. void MainWindow::readFile(){     QFile file("file_csv.csv"); //файл (треба буде зробити діалог)     QStringList listA; //лист в який запишемо данні     int row = 0; //кількість рядків у майбутній таблиці (ми ж не знаємо скільки їх там ;)     if (file.open(QIODevice::ReadOnly)){         while (!file.atEnd()){             QString line = file.r...

Драйвер MySQL для Qt (Win)

Для одного проекту знадобилося отримати доступ до бази даних на локальному сервері MySQL 5.1 . Природно, що з ходу нічого не вийшло. Перевіривши на наявність драйвера , виявилося, що його там немає зовсім. Гаразд , збираємо самі. У мене стоїть Denwer 3 з базою 5.1.40. MySQL 5.1.40 знайти не вдалося , є 5.1.46 . Встановлюю в С : \ MySQL разом з lib'ами . QtSQK повинен бути встановлений разом з QtSource . Запускаю Qt 4.7.3 for Desktop ( mingw)     set QTDIR = C: \ QtSDK \ QtSource \ 4.7.3     set mySQLDIR = C: \ MySQL     cd % QTDIR %\ src \ plugins \ sqldrivers \ mysql     qmake " INCLUDEPATH + =% mySQLDIR %\ include " " LIBS + =% mySQLDIR %\ lib \ opt \ libmysql.lib "- o Makefile mysql.pro     mingw32 - make   Йдемо в% QTDIR %\ src \ plugins \ sqldrivers \ mysql і копіюємо в С: \ QtSQK \ Desktop \ Qt \ 4.7.3 \ mingw \ plugins \ sqldrivers файли ...