26.QT颜色与布局

dialog.h

 1 #ifndef PALETTE_H
 2 #define PALETTE_H
 3
 4 #include <QDialog>
 5 #include <QComboBox>
 6 #include <QLabel>
 7 #include <QTextEdit>
 8 #include <QPushButton>
 9 #include <QLineEdit>
10
11 class Palette : public QDialog
12 {
13     Q_OBJECT
14
15 public:
16     Palette(QWidget *parent = 0);
17     ~Palette();
18
19     //创建左边布局
20     void createCtrlFrame();
21     //创建右边布局
22     void createContentFrame();
23     //给下拉框填充颜色
24     void fillColorList(QComboBox *);
25
26 private slots:
27     void showWindow();
28     void showWindowText();
29     void showButton();
30     void showButtonText();
31     void showBase();
32
33 private:
34     QFrame *ctrlFrame;
35     QLabel *windowLabel;
36     QComboBox *windowComboBox;
37     QLabel *windowTextLabel;
38     QComboBox *windowTextComboBox;
39     QLabel *buttonLabel;
40     QComboBox *buttonComboBox;
41     QLabel *buttonTextLabel;
42     QComboBox *buttonTextComboBox;
43     QLabel *baseLabel;
44     QComboBox *baseComboBox;
45     QFrame *contentFrame;
46     QLabel *label1;
47     QComboBox *comboBox1;
48     QLabel *label2;
49     QLineEdit *lineEdit2;
50     QTextEdit *textEdit;
51     QPushButton *okBtn;
52     QPushButton *cancelBtn;
53 };
54
55 #endif // PALETTE_H

dialog.cpp

  1 #include "dialog.h"
  2 #include <QHBoxLayout>
  3 #include <QGridLayout>
  4 #include <QPalette>
  5 #include <QBoxLayout>
  6
  7 Palette::Palette(QWidget *parent)
  8     : QDialog(parent)
  9 {
 10     createCtrlFrame();
 11     createContentFrame();
 12     QHBoxLayout *mainLayout = new QHBoxLayout(this);
 13     mainLayout->addWidget(ctrlFrame);
 14     mainLayout->addWidget(contentFrame);
 15 }
 16
 17 //创建左边布局
 18 void Palette::createCtrlFrame()
 19 {
 20     //创建框架
 21     ctrlFrame = new QFrame;
 22
 23     //窗口背景色
 24     windowLabel = new QLabel(tr("控件背景色: "));
 25     windowComboBox = new QComboBox;
 26     fillColorList(windowComboBox);
 27     //控件与时间绑定
 28     connect(windowComboBox,SIGNAL(activated(int)),this,SLOT(showWindow()));
 29
 30      //窗口前景色
 31     windowTextLabel = new QLabel(tr("窗口字体颜色: "));
 32     windowTextComboBox = new QComboBox;
 33     fillColorList(windowTextComboBox);
 34     connect(windowTextComboBox,SIGNAL(activated(int)),this,SLOT(showWindowText()));
 35
 36     //窗口按钮的颜色
 37     buttonLabel = new QLabel(tr("窗口按钮的颜色: "));
 38     buttonComboBox = new QComboBox;
 39     fillColorList(buttonComboBox);
 40     connect(buttonComboBox,SIGNAL(activated(int)),this,SLOT(showButton()));
 41
 42     //窗口按钮上面文本的颜色
 43     buttonTextLabel = new QLabel(tr("窗口按钮上面文本的颜色: "));
 44     buttonTextComboBox = new QComboBox;
 45     fillColorList(buttonTextComboBox);
 46     connect(buttonTextComboBox,SIGNAL(activated(int)),this,SLOT(showButtonText()));
 47
 48     //编辑框背景色
 49     baseLabel = new QLabel(tr("编辑框背景色: "));
 50     baseComboBox = new QComboBox;
 51     fillColorList(baseComboBox);
 52     connect(baseComboBox,SIGNAL(activated(int)),this,SLOT(showBase()));
 53
 54     //创建网格布局,框架是ctrFrame
 55     QGridLayout *mainLayout = new QGridLayout(ctrlFrame);
 56     //设置间距
 57     mainLayout->setSpacing(20);
 58     mainLayout->addWidget(windowLabel,0,0);
 59     mainLayout->addWidget(windowComboBox,0,1);
 60
 61     mainLayout->addWidget(windowTextLabel,1,0);
 62     mainLayout->addWidget(windowTextComboBox,1,1);
 63
 64     mainLayout->addWidget(buttonLabel,2,0);
 65     mainLayout->addWidget(buttonComboBox,2,1);
 66
 67     mainLayout->addWidget(buttonTextLabel,3,0);
 68     mainLayout->addWidget(buttonTextComboBox,3,1);
 69
 70     mainLayout->addWidget(baseLabel,4,0);
 71     mainLayout->addWidget(baseComboBox,4,1);
 72
 73 }
 74
 75 //创建右边布局
 76 void Palette::createContentFrame()
 77 {
 78     contentFrame = new QFrame;
 79     label1 = new QLabel(tr("请选择一个值:"));
 80     comboBox1 = new QComboBox;
 81
 82     label2 = new QLabel(tr("请输入字符串: "));
 83     lineEdit2 = new QLineEdit;
 84
 85     textEdit = new QTextEdit;
 86
 87     //创建网格布局
 88     QGridLayout *topLayout = new QGridLayout;
 89     topLayout->addWidget(label1,0,0);
 90     topLayout->addWidget(comboBox1,0,1);
 91     topLayout->addWidget(label2,1,0);
 92     topLayout->addWidget(lineEdit2,1,1);
 93     topLayout->addWidget(textEdit,2,0,1,2);
 94
 95     okBtn = new QPushButton(tr("确认"));
 96     cancelBtn = new QPushButton(tr("取消"));
 97
 98     //创建水平布局
 99     QHBoxLayout *bottomLayout = new QHBoxLayout;
100     //设置伸缩性
101     bottomLayout->addStretch(1);
102     bottomLayout->addWidget(okBtn);
103     bottomLayout->addWidget(cancelBtn);
104
105     //创建垂直布局,把两个布局加入,框架是contentFrame
106     QVBoxLayout *mainlayout = new QVBoxLayout(contentFrame);
107     mainlayout->addLayout(topLayout);
108     mainlayout->addLayout(bottomLayout);
109
110     //允许自动填充
111     okBtn->setAutoFillBackground(true);
112     cancelBtn->setAutoFillBackground(true);
113     //设置可以填充
114     contentFrame->setAutoFillBackground(true);
115 }
116
117 //用于控制背景颜色的显示
118 void Palette::showWindow()
119 {
120     QStringList colorList = QColor::colorNames();
121     QColor color = QColor(colorList[windowComboBox->currentIndex()]);
122
123
124     QPalette p = contentFrame->palette();
125     p.setColor(QPalette::Window, color);
126     contentFrame->setPalette(p);
127
128     contentFrame->update();
129 }
130
131 //对窗体的前景色进行设置
132 void Palette::showWindowText()
133 {
134     QStringList colorList = QColor::colorNames();
135     QColor color = colorList[windowTextComboBox->currentIndex()];
136
137     QPalette p = contentFrame->palette();
138     p.setColor(QPalette::WindowText, color);
139     contentFrame->setPalette(p);
140 }
141
142 //按钮文字颜色设置
143 void Palette::showButtonText()
144 {
145     QStringList colorList = QColor::colorNames();
146     QColor color = QColor(colorList[buttonTextComboBox->currentIndex()]);
147
148     QPalette p = contentFrame->palette();
149     p.setColor(QPalette::ButtonText , color);
150     contentFrame->setPalette(p);
151 }
152
153 //edit背景颜色设置
154 void Palette::showBase()
155 {
156     QStringList colorList = QColor::colorNames();
157     QColor color = QColor(colorList[baseComboBox->currentIndex()]);
158
159     QPalette p = contentFrame->palette();
160     p.setColor(QPalette::Base , color);
161     contentFrame->setPalette(p);
162 }
163
164 //控件添加颜色
165 void Palette::fillColorList(QComboBox *comboBox)
166 {
167     QStringList colorList = QColor::colorNames();
168     QString color;
169
170     foreach (color, colorList)
171     {
172         QPixmap pix(QSize(70,20));
173         pix.fill(QColor(color));
174         comboBox->addItem(QIcon(pix), NULL);
175         comboBox->setIconSize(QSize(70,20));
176         comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
177     }
178 }
179
180 //按钮颜色设置
181 void Palette::showButton()
182 {
183     QStringList colorList = QColor::colorNames();
184     QColor color = QColor(colorList[buttonComboBox->currentIndex()]);
185
186     //contentFrame->setAutoFillBackground(true);
187
188     QPalette p = contentFrame->palette();
189     p.setColor(QPalette::Button , color);
190     contentFrame->setPalette(p);
191
192     contentFrame->update();
193
194 }
195
196 Palette::~Palette()
197 {
198
199 }

原文地址:https://www.cnblogs.com/xiaochi/p/8763119.html

时间: 2024-10-12 00:16:39

26.QT颜色与布局的相关文章

qt坐标系统与布局的简单入门

 qt坐标系统 qt坐标系统比較简单 button.setGeometry(20,20,100,100); 上面的代码把button显示为父窗体的20,20处宽度为100,高度为100 接下去是布局 qt里面布局须要增加<QLayout.h>这个头文件. qt里面垂直布局 qt里面的垂直布局须要导入<QVBoxLayout.h>这个头文件. qt里面的水平布局须要导入<QHBoxLayout.h>这个头文件. 以下是是一段布局的代码 QHBoxLayout layo

qt——常用的布局方法

布局相关对象及简介 窗体上的所有的控件必须有一个合适的尺寸和位置.Qt提供了一些类负责排列窗体上的控件,主要有:QHBoxLayout,QVBoxLayout,QGridLayout,QStackLayout.(布局管理类)这些类简单易用,无论在代码中还是用Qt Designer开发程序都能用到. 1)         布局类简介 QHBoxLayout:水平布局 QVBoxLayout:垂直布局 QGridLayout: 表格布局 QGridLayout::addWidget()语法 layo

QT的组件布局

在QT的IDE下,编写一个自定义布局. 1 #include<QApplication> 2 #include<QWidget> 3 #include<QSpinBox> 4 #include<QSlider> 5 #include<QHBoxLayout> 6 7 int main (int argc,char *argv[]) 8 { 9 QApplication app(argc, argv); 10 QWidget * window =

Qt垂直/水平布局管理器(QBoxLayout,QHBoxLayout, QVBoxLayout)

1.解释 QBoxLayout:可以在水平方向或垂直方向上排列控件,由QHBoxLayout.QVBoxLayout所继承. QHBoxLayout:水平布局,在水平方向上排列控件. QVBoxLayout:垂直布局,在垂直方向上排列控件. 同时我们注意到水平布局.垂直布局除了构造时的方向(LeftToRight.TopToBottom)不同外,其它均相同. 2.示例代码 2.1QHBoxLayout, QVBoxLayout实现 1 #include "widget.h" 2 #in

Qt学习四 - 布局管理器

开发界面程序,一定会涉及到布局的问题.我们需要让控件显示在理想中的位置,可以直接设置控件的坐标和宽高.但是这样带来一个问题,当用户改变窗口大小时,例如点击最大化按钮或者拖拽窗口边缘,控件是不会改变的(包括控件的坐标和宽高).因为在窗口改变时,你没有告诉程序是否更新控件以及如何更新.如果需要让控件自动更新,那么就要自己来写一些函数来相应这些变化.针对这种情况,Qt提供了一种机制 - 布局,来解决这个问题(大部分用于开发界面程序的语言或者框架,都会提供类似的机制).只需要将控件放入某一种布局,当位置

Qt之自定义布局管理器(QFlowLayout)

简述 QFlowLayout,顾名思义-流布局,实现了处理不同窗口大小的布局.根据应用窗口的宽度来进行控件放置的变化. 具体实现要求不再赘述,请参考前两节内容. 简述 实现 效果 源码 实现 QFlowLayout主要采用QLayout和QWidgetItem实现,而窗口使用了QWidget和QPushButton. 效果 源码 QFlowLayout.h #ifndef QFLOWLAYOUT_H #define QFLOWLAYOUT_H #include <QLayout> #inclu

Qt之自定义布局管理器(QBorderLayout)

简述 QBorderLayout,顾名思义-边框布局,实现了排列子控件包围中央区域的布局. 具体实现要求不再赘述,请参考前几节内容. 简述 实现 效果 源码 使用 实现 QBorderLayout主要采用QLayout和QWidgetItem实现,而窗口使用了QWidget,中央窗体使用QTextBrowser,四周以QLabel排列. 效果 源码 QBorderLayout.h #ifndef QBORDERLAYOUT_H #define QBORDERLAYOUT_H #include <

Qt之手动布局

简述 手动布局,可以实现和水平布局.垂直布局.网格布局等相同的效果,也可实现属于自己的自定义布局,当窗体缩放时,控件可以随之变化. 其对于坐标系的建立有严格要求,纯代码思维,使用复杂,不易维护,所以一般不建议使用. 下面我们以简单的例子来讲解如何使用. 简述 事件 垂直布局 简略图 效果 源码 水平布局 效果 源码 总结 事件 在Qt之布局管理器一节中,我们介绍了对于手动布局的实现思路. 通过QWidget::resizeEvent()来计算所需要分配的大小,并且给每个子控件调用setGeome

Qt之格栅布局(QGridLayout)

简述 QGridLayout:格栅布局,也被称作网格布局(多行多列). 栅格布局将位于其中的窗口部件放入一个网状的栅格之中.QGridLayout需要将提供给它的空间划分成的行和列,并把每个窗口部件插入并管理到正确的单元格. 栅格布局是这样工作的: 它计算了位于其中的空间,然后将它们合理的划分成若干个行(row)和列(column),并把每个由它管理的窗口部件放置在合适的单元之中,这里所指的单元(cell)即是指由行和列交叉所划分出来的空间. 在栅格布局中,行和列本质上是相同的,只是叫法不同而已