主要实现悬浮窗口的左右移动,QTreeWidget子项信号的使用 ,以及菜单栏与状态栏的使用。
一、效果图展示
二、主要代码
mainwindow.h
public:
int m_time;
QLabel* m_label;
QMenuBar *m_pbar;
QMenu *m_menu;
QToolBar* m_toolbar;
QStatusBar* m_statuBar;
QTreeWidget* m_treeWidget;
public:
void createMeenu();
void init();
void setTreeWidget();
void createTree();
void upDateTime();
void createStatuBar();
void addChildTree(QTreeWidgetItem* parentItem,int num);
void timerEvent(QTimerEvent *);
public slots:
void setClorSlot(QTreeWidgetItem* parentItem, int num);
mainwindow.cpp
void MainWindow::init()
{
//设置为左右悬浮
ui->m_dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
ui->m_dockWidget->setStyleSheet("QDockWidget > QWidget {\nborder: 10px solid rgb(245,245,245);\n};");
//设置标题
ui->m_dockWidget->setWindowTitle("Dock Widet");
//设置窗口不可关闭
ui->m_dockWidget->setFeatures(QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetFloatable);
/*去掉标题栏,悬浮窗不能移动*/
// QWidget *_titleWidget = new QWidget(this);
// ui->m_dockWidget->setTitleBarWidget(_titleWidget);
createMeenu();
createTree();
createStatuBar();
connect(m_treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int )),
this, SLOT(setClorSlot(QTreeWidgetItem* , int )));
}
void MainWindow::createMeenu()
{
m_pbar = new QMenuBar(this);
m_pbar->setStyleSheet(" QMenuBar {\
background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,\
stop:0 lightgray, stop:1 rgb(245,245,245));\
}");
this->setMenuBar(m_pbar);
m_menu = new QMenu(QString::fromLocal8Bit("文件"));
m_pbar->addMenu(m_menu);
}
void MainWindow::setTreeWidget()
{
//设置表头
m_treeWidget->setHeaderLabel(QString::fromLocal8Bit("章节"));
//设置表头居中
m_treeWidget->headerItem()->setTextAlignment(0, Qt::AlignHCenter);
m_treeWidget->setStyleSheet("QHeaderView::section{background:rgb(245,245,245);}");
QTreeWidgetItem* parentItem;
//一级节点
for (int i = 0; i < 3; i++)
{
parentItem = new QTreeWidgetItem(m_treeWidget);
switch (i)
{
case 0:
parentItem->setText(0, QString::fromLocal8Bit("一章节"));
break;
case 1:
parentItem->setText(0, QString::fromLocal8Bit("二章节"));
break;
case 2:
parentItem->setText(0, QString::fromLocal8Bit("三章节"));
break;
default:
break;
}
addChildTree(parentItem,i);
}
}
void MainWindow::addChildTree(QTreeWidgetItem* parentItem, int num)
{
QString text;
text = QString::number(num + 1, 10) + ".1";
QTreeWidgetItem* childTree = new QTreeWidgetItem(parentItem);
childTree->setText(0, text);
m_treeWidget->setCurrentItem(parentItem);
}
void MainWindow::timerEvent(QTimerEvent *e)
{
qint32 timerId = e->timerId();
if (timerId == m_time)
{
QTime tmCur = QTime::currentTime();
QString str = tmCur.toString("hh:mm:ss.zzz");
m_label->setText(str);
}
}
void MainWindow::createTree()
{
m_treeWidget = new QTreeWidget(ui->m_dockWidget);
//设置显示控件为QTreeWidget
ui->m_dockWidget->setWidget(m_treeWidget);
setTreeWidget();
}
void MainWindow::upDateTime()
{
char str[128];
time_t t;
time(&t);
tm * ltm = localtime(&t);
sprintf(str, "%02d:%02d:%02d", ltm->tm_hour, ltm->tm_min, ltm->tm_sec);
//状态栏显示时间
m_label->setText(QString::fromLocal8Bit(str));
}
void MainWindow::createStatuBar()
{
m_statuBar = new QStatusBar(this);
m_statuBar->setStyleSheet(" QStatusBar {background-color:rgb(220,220,220));}");
setStatusBar(m_statuBar);
m_label = new QLabel(statusBar());
m_label->setFrameStyle(QFrame::Panel | QFrame::Sunken);
m_label->setAlignment(Qt::AlignCenter);
m_label->setFixedWidth(120);
m_time = startTimer(100);
upDateTime();
}
void MainWindow::setClorSlot(QTreeWidgetItem* parentItem, int num)
{
if (NULL == parentItem->parent())
{
return;
}
if (QString::fromLocal8Bit("一章节") == parentItem->parent()->text(0))
{
ui->m_textEdit->setStyleSheet("background-color: rgb(85, 255, 0);}");
}
else if (QString::fromLocal8Bit("二章节") == parentItem->parent()->text(0))
{
ui->m_textEdit->setStyleSheet("background-color: rgb(245, 245, 245);}");
}
else
{
ui->m_textEdit->setStyleSheet("background-color: rgb(0, 0, 255);}");
}
}
记录学习,后期还会继续完善功能