void TabBarWidget::setOrientation(Qt::DockWidgetArea orientation) { switch (orientation) { case Qt::LeftDockWidgetArea: setShape(QTabBar::RoundedWest); break; case Qt::RightDockWidgetArea: setShape(QTabBar::RoundedEast); break; case Qt::BottomDockWidgetArea: setShape(QTabBar::RoundedSouth); break; default: setShape(QTabBar::RoundedNorth); break; } QDockWidget *widget = qobject_cast<QDockWidget*>(parentWidget()->parentWidget()); if (widget) { if (orientation == Qt::LeftDockWidgetArea || orientation == Qt::RightDockWidgetArea) { widget->setFeatures(widget->features() & ~QDockWidget::DockWidgetVerticalTitleBar); } else { widget->setFeatures(widget->features() | QDockWidget::DockWidgetVerticalTitleBar); } } QBoxLayout *layout = qobject_cast<QBoxLayout*>(parentWidget()->layout()); if (layout) { if (orientation == Qt::LeftDockWidgetArea || orientation == Qt::RightDockWidgetArea) { layout->setDirection(QBoxLayout::TopToBottom); } else { layout->setDirection(QBoxLayout::LeftToRight); } } }
void KoDockWidgetTitleBar::setLocked(bool locked) { QDockWidget *q = qobject_cast<QDockWidget*>(parentWidget()); d->locked = locked; d->lockButton->blockSignals(true); d->lockButton->setChecked(locked); d->lockButton->blockSignals(false); //qDebug() << "setlocked" << q << d->locked << locked; if (locked) { d->features = q->features(); q->setFeatures(QDockWidget::NoDockWidgetFeatures); } else { q->setFeatures(d->features); } q->toggleViewAction()->setEnabled(!locked); d->closeButton->setEnabled(!locked); d->floatButton->setEnabled(!locked); d->collapseButton->setEnabled(!locked); d->updateIcons(); q->setProperty("Locked", locked); resizeEvent(0); }
QSize TitleBar::minimumSizeHint() const { QDockWidget *dw = qobject_cast<QDockWidget*>(parentWidget()); Q_ASSERT(dw != 0); QSize result(rightPm.width(), centerPm.height()); if (dw->features() & QDockWidget::DockWidgetVerticalTitleBar) result.transpose(); return result; }
QDockWidget* MainWindow::createDockWidget(KoDockFactoryBase* factory) { QDockWidget* dockWidget = 0; if(!m_dockWidgetMap.contains(factory->id())) { dockWidget = factory->createDockWidget(); // It is quite possible that a dock factory cannot create the dock; don't // do anything in that case. if(!dockWidget) return 0; m_dockWidgets.push_back(dockWidget); dockWidget->setObjectName(factory->id()); dockWidget->setParent(this); if(dockWidget->widget() && dockWidget->widget()->layout()) dockWidget->widget()->layout()->setContentsMargins(1, 1, 1, 1); Qt::DockWidgetArea side = Qt::RightDockWidgetArea; bool visible = true; switch(factory->defaultDockPosition()) { case KoDockFactoryBase::DockTornOff: dockWidget->setFloating(true); // position nicely? break; case KoDockFactoryBase::DockTop: side = Qt::TopDockWidgetArea; break; case KoDockFactoryBase::DockLeft: side = Qt::LeftDockWidgetArea; break; case KoDockFactoryBase::DockBottom: side = Qt::BottomDockWidgetArea; break; case KoDockFactoryBase::DockRight: side = Qt::RightDockWidgetArea; break; case KoDockFactoryBase::DockMinimized: visible = false; break; default:; } addDockWidget(side, dockWidget); if(dockWidget->features() & QDockWidget::DockWidgetClosable) { m_dockWidgetMenu->addAction(dockWidget->toggleViewAction()); if(!visible) dockWidget->hide(); } m_dockWidgetMap.insert(factory->id(), dockWidget); } else { dockWidget = m_dockWidgetMap[ factory->id()]; } connect(dockWidget, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), this, SLOT(forceDockTabFonts())); return dockWidget; }
void QxFileBrowser::blockFloating(bool on) { #ifdef Q_WS_MAC #ifdef QT_MAC_USE_COCOA QDockWidget* dock = qobject_cast<QDockWidget*>(parentWidget()); if (dock) { QFlags<QDockWidget::DockWidgetFeature> flags = dock->features(); if (on) flags &= ~QDockWidget::DockWidgetMovable; else flags |= QDockWidget::DockWidgetMovable; dock->setFeatures(flags); } #endif // QT_MAC_USE_COCOA #endif // Q_WS_MAC }
void tst_QDockWidget::taskQTBUG_1665_closableChanged() { QDockWidget dock; dock.show(); QVERIFY(QTest::qWaitForWindowExposed(&dock)); QDockWidgetLayout *l = qobject_cast<QDockWidgetLayout*>(dock.layout()); if (l && !l->nativeWindowDeco()) QSKIP("this machine doesn't support native dock widget"); QVERIFY(dock.windowFlags() & Qt::WindowCloseButtonHint); //now let's remove the closable attribute dock.setFeatures(dock.features() ^ QDockWidget::DockWidgetClosable); QVERIFY(!(dock.windowFlags() & Qt::WindowCloseButtonHint)); }
WindowImpl::WindowImpl(): m_ui(new Ui::WindowImpl) { m_ui->setupUi(this); QApplication::setStyle(new QNotoStyle); QSettings sets(QSettings::IniFormat, QSettings::UserScope, "qnoto", "qnoto"); restoreGeometry(sets.value("MainWindow/Geometry").toByteArray()); QDockWidget *dockWidget = new QDockWidget("Left side", this); dockWidget->setContentsMargins(0, 0, 0, 0); dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea); dockWidget->setFloating(false); dockWidget->setFeatures(dockWidget->features() ^ QDockWidget::DockWidgetClosable ^ QDockWidget::DockWidgetMovable ^ QDockWidget::DockWidgetFloatable); dockWidget->setTitleBarWidget(new QWidget); m_split = new SideSplit(this); dockWidget->setWidget(m_split); addDockWidget(Qt::LeftDockWidgetArea, dockWidget); m_editors = qnoto::plugin<qnoto::Editors>(); connect(m_editors, &qnoto::Editors::updateEditMenu, this, &WindowImpl::updateEditMenu); setCentralWidget(m_editors); const auto& acts = m_editors->actions(); for(const auto& it: acts){ if (it->property("name").toString().startsWith("File_")){ m_ui->menuFile->addAction(it); } if (it->property("name").toString().startsWith("Window_")){ m_ui->menuWindow->addAction(it); } } connect(m_ui->actionPreferences, &QAction::triggered, this, &WindowImpl::showPreferences); m_split->restoreState(sets); m_editors->restoreState(); }
QDockWidget* MainWindow::createDockWidget(KoDockFactoryBase* factory) { QDockWidget* dockWidget = 0; if(!m_dockWidgetMap.contains(factory->id())) { dockWidget = factory->createDockWidget(); // It is quite possible that a dock factory cannot create the dock; don't // do anything in that case. if(!dockWidget) return 0; m_dockWidgets.push_back(dockWidget); dockWidget->setObjectName(factory->id()); dockWidget->setParent(this); if(dockWidget->widget() && dockWidget->widget()->layout()) dockWidget->widget()->layout()->setContentsMargins(1, 1, 1, 1); Qt::DockWidgetArea side = Qt::RightDockWidgetArea; bool visible = true; switch(factory->defaultDockPosition()) { case KoDockFactoryBase::DockTornOff: dockWidget->setFloating(true); // position nicely? break; case KoDockFactoryBase::DockTop: side = Qt::TopDockWidgetArea; break; case KoDockFactoryBase::DockLeft: side = Qt::LeftDockWidgetArea; break; case KoDockFactoryBase::DockBottom: side = Qt::BottomDockWidgetArea; break; case KoDockFactoryBase::DockRight: side = Qt::RightDockWidgetArea; break; case KoDockFactoryBase::DockMinimized: visible = false; break; default:; } addDockWidget(side, dockWidget); if(dockWidget->features() & QDockWidget::DockWidgetClosable) { m_dockWidgetMenu->addAction(dockWidget->toggleViewAction()); if(!visible) dockWidget->hide(); } m_dockWidgetMap.insert(factory->id(), dockWidget); } else { dockWidget = m_dockWidgetMap[ factory->id()]; } KConfigGroup group(KSharedConfig::openConfig(), "GUI"); QFont dockWidgetFont = QFontDatabase::systemFont(QFontDatabase::GeneralFont); qreal pointSize = group.readEntry("palettefontsize", dockWidgetFont.pointSize() * 0.75); pointSize = qMax(pointSize, QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont).pointSizeF()); dockWidgetFont.setPointSizeF(pointSize); #ifdef Q_WS_MAC dockWidget->setAttribute(Qt::WA_MacSmallSize, true); #endif dockWidget->setFont(dockWidgetFont); connect(dockWidget, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), this, SLOT(forceDockTabFonts())); return dockWidget; }
void tst_QDockWidget::features() { QDockWidget dw; QSignalSpy spy(&dw, SIGNAL(featuresChanged(QDockWidget::DockWidgetFeatures))); // default features for dock widgets int allDockWidgetFeatures = QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable; // defaults QCOMPARE(dw.features(), allDockWidgetFeatures); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable)); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetMovable)); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetFloatable)); // test individual setting setFeature(&dw, QDockWidget::DockWidgetClosable, false); QCOMPARE(dw.features(), QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable); QVERIFY(!hasFeature(&dw, QDockWidget::DockWidgetClosable)); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetMovable)); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetFloatable)); QCOMPARE(spy.count(), 1); QCOMPARE((int)*(static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData())), (int)dw.features()); spy.clear(); dw.setFeatures(dw.features()); QCOMPARE(spy.count(), 0); spy.clear(); setFeature(&dw, QDockWidget::DockWidgetClosable); QCOMPARE(dw.features(), allDockWidgetFeatures); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable)); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetMovable)); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetFloatable)); QCOMPARE(spy.count(), 1); QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()), (int)dw.features()); spy.clear(); dw.setFeatures(dw.features()); QCOMPARE(spy.count(), 0); spy.clear(); setFeature(&dw, QDockWidget::DockWidgetMovable, false); QCOMPARE(dw.features(), QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable)); QVERIFY(!hasFeature(&dw, QDockWidget::DockWidgetMovable)); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetFloatable)); QCOMPARE(spy.count(), 1); QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()), (int)dw.features()); spy.clear(); dw.setFeatures(dw.features()); QCOMPARE(spy.count(), 0); spy.clear(); setFeature(&dw, QDockWidget::DockWidgetMovable); QCOMPARE(dw.features(), allDockWidgetFeatures); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable)); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetMovable)); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetFloatable)); QCOMPARE(spy.count(), 1); QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()), (int)dw.features()); spy.clear(); dw.setFeatures(dw.features()); QCOMPARE(spy.count(), 0); spy.clear(); setFeature(&dw, QDockWidget::DockWidgetFloatable, false); QCOMPARE(dw.features(), QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable)); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetMovable)); QVERIFY(!hasFeature(&dw, QDockWidget::DockWidgetFloatable)); QCOMPARE(spy.count(), 1); QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()), (int)dw.features()); spy.clear(); dw.setFeatures(dw.features()); QCOMPARE(spy.count(), 0); spy.clear(); setFeature(&dw, QDockWidget::DockWidgetFloatable); QCOMPARE(dw.features(), allDockWidgetFeatures); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable)); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetMovable)); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetFloatable)); QCOMPARE(spy.count(), 1); QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()), (int)dw.features()); spy.clear(); dw.setFeatures(dw.features()); QCOMPARE(spy.count(), 0); spy.clear(); // set all at once dw.setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable); QCOMPARE(dw.features(), QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable)); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetMovable)); QVERIFY(!hasFeature(&dw, QDockWidget::DockWidgetFloatable)); QCOMPARE(spy.count(), 1); QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()), (int)dw.features()); spy.clear(); dw.setFeatures(dw.features()); QCOMPARE(spy.count(), 0); spy.clear(); dw.setFeatures(QDockWidget::DockWidgetClosable); QCOMPARE(dw.features(), QDockWidget::DockWidgetClosable); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable)); QVERIFY(!hasFeature(&dw, QDockWidget::DockWidgetMovable)); QVERIFY(!hasFeature(&dw, QDockWidget::DockWidgetFloatable)); QCOMPARE(spy.count(), 1); QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()), (int)dw.features()); spy.clear(); dw.setFeatures(dw.features()); QCOMPARE(spy.count(), 0); spy.clear(); dw.setFeatures(QDockWidget::AllDockWidgetFeatures); QCOMPARE(dw.features(), QDockWidget::AllDockWidgetFeatures); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable)); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetMovable)); QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetFloatable)); QCOMPARE(spy.count(), 1); QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()), (int)dw.features()); spy.clear(); dw.setFeatures(dw.features()); QCOMPARE(spy.count(), 0); spy.clear(); }
DSPWindow::DSPWindow(QWidget *parent) : QMainWindow(parent) { owDate = new QDate; *owDate = QDate::currentDate(); // Меню - Файл --------------------------------------------------------------- QToolBar *tb = new QToolBar(this); tb->setWindowTitle(tr("File Actions")); addToolBar(tb); QMenu *menu = new QMenu(tr("&File"), this); menuBar()->addMenu(menu); QAction *a; a = new QAction(QIcon(rsrcPath + "/filenew.png"), tr("&New"), this); a->setShortcut(Qt::CTRL + Qt::Key_N); //connect(a, SIGNAL(triggered()), this, SLOT(fileNew())); tb->addAction(a); menu->addAction(a); a = new QAction(QIcon(rsrcPath + "/fileopen.png"), tr("&Open..."), this); a->setShortcut(Qt::CTRL + Qt::Key_O); //connect(a, SIGNAL(triggered()), this, SLOT(fileOpen())); tb->addAction(a); menu->addAction(a); menu->addSeparator(); actionSave = a = new QAction(QIcon(rsrcPath + "/filesave.png"), tr("&Save"), this); a->setShortcut(Qt::CTRL + Qt::Key_S); //connect(a, SIGNAL(triggered()), this, SLOT(fileSave())); a->setEnabled(false); tb->addAction(a); menu->addAction(a); a = new QAction(tr("Save &As..."), this); //connect(a, SIGNAL(triggered()), this, SLOT(fileSaveAs())); menu->addAction(a); menu->addSeparator(); a = new QAction(QIcon(rsrcPath + "/fileprint.png"), tr("&Print..."), this); a->setShortcut(Qt::CTRL + Qt::Key_P); //connect(a, SIGNAL(triggered()), this, SLOT(filePrint())); tb->addAction(a); menu->addAction(a); a = new QAction(QIcon(rsrcPath + "/exportpdf.png"), tr("&Export PDF..."), this); a->setShortcut(Qt::CTRL + Qt::Key_D); //connect(a, SIGNAL(triggered()), this, SLOT(filePrintPdf())); tb->addAction(a); menu->addAction(a); menu->addSeparator(); a = new QAction(tr("&Quit"), this); a->setShortcut(Qt::CTRL + Qt::Key_Q); connect(a, SIGNAL(triggered()), this, SLOT(close())); menu->addAction(a); // Меню - Файл .............................................................. // Навигатор ---------------------------------------------------------------- //QPalette palette( Qt::gray ); //palette.setColor( QPalette::Button , QColor(Qt::white)); navigator = new QDockWidget(tr("Навигатор"), this); navigator->setFeatures( navigator->features() ^ QDockWidget::DockWidgetClosable ); navigator->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); navigator->setMaximumSize(QSize( NButtonWidth + 40 , 16777215)); // <- Задаем фиксированный размер navigator->setMinimumSize(QSize( NButtonWidth + 40 , 0)); // <----------| addDockWidget(Qt::LeftDockWidgetArea, navigator ); navigatorBox = new QToolBox( navigator ); navigatorBox->setFrameShape( QFrame::Panel ); navigatorBox->setFrameShadow( QFrame::Plain ); navigatorBox->setLineWidth(1); //navigatorBox->setPalette( palette ); navigator->setWidget( navigatorBox ); navigatorButtonGroup = new QButtonGroup; navigatorButtonGroup->setExclusive ( true ); connect( navigatorButtonGroup , SIGNAL(buttonClicked ( int )), this, SLOT(selectPageInMainLayout( int ))); NavigatorButton *navigatorButton; NavigatorLabel *navigatorLabel; // Оперативная работа --- QWidget *pageOpWork = new QWidget(); QVBoxLayout *pageOpWorkVboxLayout = new QVBoxLayout( pageOpWork ); pageOpWorkVboxLayout->setSpacing(6); pageOpWorkVboxLayout->setMargin(9); navigatorBox->addItem( pageOpWork , tr( "Оперативная работа" )); navigatorBox->setItemIcon ( 0 , QIcon( piconPath + "/32/ow.png") ); // ее кнопки navigatorLabel = new NavigatorLabel( tr( "Производство:")); pageOpWorkVboxLayout->addWidget( navigatorLabel ); navigatorButton = new NavigatorButton( tr( "Производство фосфора") , QIcon( piconPath + "/32/Factor.png") ); pageOpWorkVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 21 ); navigatorButton = new NavigatorButton( tr( "Выработка") , QIcon( piconPath + "/32/vyr.png") ); pageOpWorkVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 22 ); // Разделитель >-------< QFrame *line = new QFrame; // -------------------------- line->setFrameShape(QFrame::HLine); pageOpWorkVboxLayout->addWidget( line ); navigatorLabel = new NavigatorLabel( tr( "Сырье:")); pageOpWorkVboxLayout->addWidget( navigatorLabel ); navigatorButton = new NavigatorButton( tr( "Приход сырья") , QIcon( piconPath + "/22/add.png") ); pageOpWorkVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 23 ); navigatorButton = new NavigatorButton( tr( "Остатки сырья") , QIcon( piconPath + "/32/ost.png") ); pageOpWorkVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 24 ); // Разделитель >-------< line = new QFrame; // -------------------------- line->setFrameShape(QFrame::HLine); pageOpWorkVboxLayout->addWidget( line ); navigatorLabel = new NavigatorLabel( tr( "Продукция:")); pageOpWorkVboxLayout->addWidget( navigatorLabel ); navigatorButton = new NavigatorButton( tr( "Приход со стороны") , QIcon( piconPath + "/22/add.png") ); pageOpWorkVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 25 ); navigatorButton = new NavigatorButton( tr( "Отгрузка продукции") , QIcon( piconPath + "/22/remove.png") ); pageOpWorkVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 26 ); navigatorButton = new NavigatorButton( tr( "Остатки продукции") , QIcon( piconPath + "/32/ost.png") ); pageOpWorkVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 27 ); // Разделитель >-------< line = new QFrame; // -------------------------- line->setFrameShape(QFrame::HLine); pageOpWorkVboxLayout->addWidget( line ); navigatorButton = new NavigatorButton( tr( "Простои") , QIcon( piconPath + "/32/potP4.png") ); pageOpWorkVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 26 ); QSpacerItem *spacerItem = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); pageOpWorkVboxLayout->addItem( spacerItem ); // Оперативная работа ... // Отчеты --- QWidget *pageRaports = new QWidget(); QVBoxLayout *pageRaportsVboxLayout = new QVBoxLayout( pageRaports ); pageRaportsVboxLayout->setSpacing(6); pageRaportsVboxLayout->setMargin(9); navigatorBox->addItem( pageRaports , tr( "Отчеты" )); navigatorBox->setItemIcon ( 1 , QIcon( piconPath + "/16/fileopen.png") ); navigatorButton = new NavigatorButton( tr( "Информация о работе") , QIcon( radiantPath + "/docs_16.png") ); pageRaportsVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 41 ); // Разделитель >-------< line = new QFrame; // -------------------------- line->setFrameShape(QFrame::HLine); pageRaportsVboxLayout->addWidget( line ); navigatorLabel = new NavigatorLabel( tr( "Баланс общий:")); pageRaportsVboxLayout->addWidget( navigatorLabel ); navigatorButton = new NavigatorButton( tr( "Нарастающий") , QIcon( radiantPath + "/docs_16.png") ); pageRaportsVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 42 ); navigatorButton = new NavigatorButton( tr( "Текущий") , QIcon( radiantPath + "/docs_16.png") ); pageRaportsVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 43 ); spacerItem = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); pageRaportsVboxLayout->addItem( spacerItem ); spacerItem = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); pageRaportsVboxLayout->addItem( spacerItem ); // Отчеты .. // Справочники --- QWidget *pageHandbooks = new QWidget(); QVBoxLayout *pageHandbooksVboxLayout = new QVBoxLayout( pageHandbooks ); pageHandbooksVboxLayout->setSpacing(6); pageHandbooksVboxLayout->setMargin(9); navigatorBox->addItem( pageHandbooks , tr( "Справочники" )); navigatorBox->setItemIcon ( 2 , QIcon( piconPath + "/48/s.png") ); navigatorButton = new NavigatorButton( tr( "Баланс фосфора") , QIcon( piconPath + "/22/s_s22.png") ); pageHandbooksVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 51 ); navigatorButton = new NavigatorButton( tr( "Выработка") , QIcon( piconPath + "/22/s_s22.png") ); pageHandbooksVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 52 ); navigatorButton = new NavigatorButton( tr( "Продукция") , QIcon( piconPath + "/22/s_s22.png") ); pageHandbooksVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 53 ); navigatorButton = new NavigatorButton( tr( "Сырье") , QIcon( piconPath + "/22/s_s22.png") ); pageHandbooksVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 54 ); navigatorButton = new NavigatorButton( tr( "Причины простоев") , QIcon( piconPath + "/22/s_s22.png") ); pageHandbooksVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 55 ); navigatorButton = new NavigatorButton( tr( "Оборудование") , QIcon( piconPath + "/22/s_s22.png") ); pageHandbooksVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 56 ); navigatorButton = new NavigatorButton( tr( "Поставщики") , QIcon( piconPath + "/22/s_s22.png") ); pageHandbooksVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 57 ); navigatorButton = new NavigatorButton( tr( "Потребители") , QIcon( piconPath + "/22/s_s22.png") ); pageHandbooksVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 58 ); // Разделитель >-------< line = new QFrame; // -------------------------- line->setFrameShape(QFrame::HLine); pageHandbooksVboxLayout->addWidget( line ); navigatorButton = new NavigatorButton( tr( "Единицы измерения массы") , QIcon( piconPath + "/22/s_s22.png") ); pageHandbooksVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 59 ); navigatorButton = new NavigatorButton( tr( "Цеха") , QIcon( piconPath + "/22/s_s22.png") ); pageHandbooksVboxLayout->addWidget( navigatorButton ); navigatorButtonGroup->addButton ( navigatorButton , 60 ); spacerItem = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); pageHandbooksVboxLayout->addItem( spacerItem ); // Справочники .. // Навигатор ................................................................ // Док календарь - все остальное для работы с датами ---- QDockWidget * dateTimeBrowser = new QDockWidget(tr("Дата"), this); dateTimeBrowser->setFeatures( dateTimeBrowser->features() ^ QDockWidget::DockWidgetClosable); dateTimeBrowser->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); dateTimeBrowser->setMaximumSize(QSize( NButtonWidth + 42 , 210 )); // <- Задаем фиксированный размер dateTimeBrowser->setMinimumSize(QSize( NButtonWidth + 42 , 0)); // <----------| addDockWidget(Qt::LeftDockWidgetArea , dateTimeBrowser ); QWidget *pDatePickerWidget = new QWidget; QVBoxLayout *pDatePickerWidgetLayout = new QVBoxLayout; pDatePickerWidgetLayout->setMargin(1); pDatePickerWidgetLayout->setAlignment( Qt::AlignHCenter | Qt::AlignVCenter ); pDatePickerWidget->setLayout( pDatePickerWidgetLayout ); PDatePicker *pDatePicker = new PDatePicker( 19 , 28 ); pDatePicker->setFrameStyle( QFrame::Box | QFrame::Plain ); //pDatePicker->setFocusPolicy( Qt::NoFocus ); pDatePickerWidgetLayout->addWidget( pDatePicker ); dateTimeBrowser->setWidget( pDatePickerWidget ); // .. // ************************************************************************* // Рабочая область --------------------------------------------------------- mainWidget = new QWidget; mainWidget->setMinimumSize(QSize(400, 0)); // >|----------|< setCentralWidget ( mainWidget ); mainLayout = new QStackedLayout( mainWidget ); // Оперативная работа ........................ // Производство фосфора ow_prod_phos = new OW_Prod_Phos; mainLayout->addWidget( ow_prod_phos ); // .. // Выработка ow_producing = new OW_Producing; mainLayout->addWidget( ow_producing ); // .. // Приход со стороны ow_income = new OW_Income; mainLayout->addWidget( ow_income ); // .. // Отгрузка ow_outcome = new OW_Outcome; mainLayout->addWidget( ow_outcome ); // .. // Отгрузка ow_depot = new OW_Depot; mainLayout->addWidget( ow_depot ); // .. //Отчеты ------------------------------------- // Общая информация по работе предприятия r_infoforday = new R_InfoForDay; mainLayout->addWidget( r_infoforday ); // .. // Баланс общий r_allproductionbalance = new R_AllProductionBalance; mainLayout->addWidget( r_allproductionbalance ); // .. // Справочники ------------------------------- // Справочник Баланс фосфора -- s_bal_dbtable = new S_BAL_DBTable; mainLayout->addWidget( s_bal_dbtable ); // .. // Выработка -- s_vyr_dbtable = new S_VYR_DBTable; mainLayout->addWidget( s_vyr_dbtable ); // .. // Продукция -- s_prod_dbtable = new S_PROD_DBTable; mainLayout->addWidget( s_prod_dbtable ); // .. // Сырье -- s_syr_dbtable = new S_SYR_DBTable; mainLayout->addWidget( s_syr_dbtable ); // .. // Причины простоев -- s_pprost_dbtable = new S_PPROST_DBTable; mainLayout->addWidget( s_pprost_dbtable ); // .. // Оборудование -- s_ob_dbtable = new S_OB_DBTable; mainLayout->addWidget( s_ob_dbtable ); // .. // Поставщики -- s_post_dbtable = new S_POST_DBTable; mainLayout->addWidget( s_post_dbtable ); // .. // Поставщики -- s_potr_dbtable = new S_POTR_DBTable; mainLayout->addWidget( s_potr_dbtable ); // .. // Цеха -- s_dep_dbtable = new S_DEP_DBTable; mainLayout->addWidget( s_dep_dbtable ); // .. // Справочник единиц измерения -- s_ed_mass_dbtable = new S_ED_MASS_DBTable; mainLayout->addWidget( s_ed_mass_dbtable ); // .. // Справочники ............................... // Рабочая область ......................................................... resize( 800, 576); // Сигналы и слоты для функций этого класса *--> >>--| connect( pDatePicker , SIGNAL( dateChanged( const QDate & )), this , SLOT( setOWDate( const QDate & ))); }
/*! * INIT: create dock widgets. */ void socketcangui::createDockWidgets() { // Send widget (table; normally in the lower part) QWidget *sendwidget = new QWidget; QHBoxLayout *sendwidgetLayout = new QHBoxLayout; sendtable = new QTreeWidget; sendtable->setColumnCount(6); sendtable->setAlternatingRowColors(true); sendtable->setHeaderLabels(QStringList() << tr("#") << tr("Interval (ms)") << tr("CAN ID (hex)") << tr("EFF") << tr("DLC") << tr("Data (hex)") << tr("Active")); timerdisplaylist.clear(); QString tmpstring; // insert ten send rows for (int i = 0; i < 10; i++) { tmpstring = QString::number(i); timerdisplaylist.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList() << tmpstring << "0" << "0" << "0" << "0" << "0" << "0")); // make the row editable timerdisplaylist.at(i)->setFlags(timerdisplaylist.at(i)->flags() | Qt::ItemIsEditable); } sendtable->addTopLevelItems(timerdisplaylist); // create the ten send timers for (int i = 0; i < 10; i++) { timerlist[i] = new QTimer; } // Really ugly but the timeout()-SIGNAL won't tell us which timer it was connect(timerlist[0], SIGNAL(timeout()), this, SLOT(sendtimer0fired())); connect(timerlist[1], SIGNAL(timeout()), this, SLOT(sendtimer1fired())); connect(timerlist[2], SIGNAL(timeout()), this, SLOT(sendtimer2fired())); connect(timerlist[3], SIGNAL(timeout()), this, SLOT(sendtimer3fired())); connect(timerlist[4], SIGNAL(timeout()), this, SLOT(sendtimer4fired())); connect(timerlist[5], SIGNAL(timeout()), this, SLOT(sendtimer5fired())); connect(timerlist[6], SIGNAL(timeout()), this, SLOT(sendtimer6fired())); connect(timerlist[7], SIGNAL(timeout()), this, SLOT(sendtimer7fired())); connect(timerlist[8], SIGNAL(timeout()), this, SLOT(sendtimer8fired())); connect(timerlist[9], SIGNAL(timeout()), this, SLOT(sendtimer9fired())); connect(sendtable, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(sendtablechanged(QTreeWidgetItem *, int))); sendwidgetLayout->addWidget(sendtable); sendwidget->setMinimumHeight(100); sendwidget->setLayout(sendwidgetLayout); QDockWidget *sendwidgetDock = new QDockWidget(tr("Send packets")); sendwidgetDock->setWidget(sendwidget); addDockWidget(Qt::BottomDockWidgetArea, sendwidgetDock); // make the dock widget non-closeable sendwidgetDock->setFeatures(sendwidgetDock->features() & ~QDockWidget::DockWidgetClosable); // Control widget (normally on the right side) QWidget *controlwidget = new QWidget; QVBoxLayout *controlwidgetLayout = new QVBoxLayout; controlwidget->setLayout(controlwidgetLayout); QDockWidget *controlwidgetDock = new QDockWidget(tr("Capture control")); controlwidgetDock->setWidget(controlwidget); addDockWidget(Qt::RightDockWidgetArea, controlwidgetDock); // make the dock widget non-closeable controlwidgetDock->setFeatures(controlwidgetDock->features() & ~QDockWidget::DockWidgetClosable); QLabel *ifacelabel = new QLabel(tr("CAN Interfaces:")); QPushButton *updateifaces = new QPushButton(tr("Update")); QHBoxLayout *ifacesheader = new QHBoxLayout; ifacesheader->addWidget(ifacelabel); ifacesheader->addWidget(updateifaces); controlwidgetLayout->addLayout(ifacesheader); ifacelist = new QTreeWidget; ifacelist->setColumnCount(2); ifacelist->setHeaderLabels(QStringList() << tr("Interface") << tr("Status")); controlwidgetLayout->addWidget(ifacelist); connect(updateifaces, SIGNAL(clicked()), this, SLOT(updateinterfacelist())); connect(ifacelist, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(ifacelistdclicked(QModelIndex))); QHBoxLayout *capturelayout = new QHBoxLayout; controlwidgetLayout->addLayout(capturelayout); QLabel *capturelabel = new QLabel(tr("Capture Interface:")); capturelayout->addWidget(capturelabel); ifacecombo = new QComboBox; capturelayout->addWidget(ifacecombo); capturepb = new QPushButton(tr("Start")); capturelayout->addWidget(capturepb); // Tell Qt that canpacket can be used with SLOTs and SIGNALs qRegisterMetaType<canpacket>("canpacket"); connect(capturepb, SIGNAL(clicked()), this, SLOT(startorstopthread())); connect(&mycanthread, SIGNAL(dataarrived(canpacket)), myclf, SLOT(adddataitem(canpacket))); // Tell Qt that threadstatus can be used with SLOTs and SIGNALs qRegisterMetaType<threadstatus>("threadstatus"); connect(&mycanthread, SIGNAL(statusChanged(threadstatus)), this, SLOT(updateStatus(threadstatus))); // Status widget (normally on the right side) QWidget *statuswidget = new QWidget; QVBoxLayout *statuswidgetLayout = new QVBoxLayout; statuswidget->setLayout(statuswidgetLayout); statuswidgetDock = new QDockWidget(tr("Capture status")); statuswidgetDock->setWidget(statuswidget); addDockWidget(Qt::RightDockWidgetArea, statuswidgetDock); // make the dock widget non-closeable statuswidgetDock->setFeatures(statuswidgetDock->features() & ~QDockWidget::DockWidgetClosable); statusdisplaylabel = new QLabel(tr("Idle")); statusdisplaylabel->setStyleSheet(HTMLLIGHTRED); statusdisplaylabel->setFrameShape(QFrame::Panel); statusdisplaylabel->setFrameShadow(QLabel::Sunken); statusdisplaylabel->setAlignment(Qt::AlignHCenter); QHBoxLayout *statusdisplaylayout = new QHBoxLayout; statusdisplaylayout->addWidget(statusdisplaylabel); statuswidgetLayout->addLayout(statusdisplaylayout); statusincounter = new QLabel(""); statuswidgetLayout->addWidget(statusincounter); statusoutcounter = new QLabel(""); statuswidgetLayout->addWidget(statusoutcounter); statusinbcounter = new QLabel(""); statuswidgetLayout->addWidget(statusinbcounter); statusoutbcounter = new QLabel(""); statuswidgetLayout->addWidget(statusoutbcounter); }