创建一个 2 行(不换行)的 QPushButton
Create a 2-line (not wrap) QPushButton
我必须创建一个包含图标和 2 行文本的QPushButton
。
理想情况下,我应该能够将图标放在左侧(在一个设计上)或中心,在文本上方(对于另一个视图中的另一个设计)。
我需要能够单独设置的 2 行文本(甚至具有不同的文本大小)。不是文本绕排。
我将对QPushButton
进行子类化,设置网格布局,并添加图标和 2 个 QLabels。添加setText2()
和text2()
。看起来很简单。
我见过有人建议这个"只是子类 xx 控件并添加自己的布局",但从来没有一个实际的不间断示例。
我的问题:
我必须做什么才能利用QPushButton
的所有内置属性和事件?我必须怎么做才能确保我有正确的调整大小事件,并且我为第一行文本添加的图标和标签是QPushButton
的实际图标和文本,以便正确应用它们?
我一直在寻找,但找不到 QPushButton 的绘图元素(QIcon 和文本的容器)——如果至少我能找到这些元素,那对我有帮助,所以我可以使用它们制作自己的布局。
在子类化之前,我会尝试将布局添加到QpushButton
,并将所需的小部件添加到布局中。为了保持在一起,我宁愿QWidget
子类并有一个这样的类:
class CustomButton : public QWidget
{
public:
explicit CustomButton(QWidget * parent);
private:
QPushButton button;
QLabel * icon;
QLabel * line1;
QLabel * line2;
};
只需添加公共方法来设置图标和文本行:
public:
void setTextLines(QString & l1, QString & l2)
{
line1->setText(l1);
line2->setText(l2);
}
void setIcon(QPixmap & pixmap)
{
icon->setPixmap(pixmap);
}
和自定义信号:
signals:
void clicked();
这是一个可能的构造函数,其中小部件被实例化,信号直接连接到按钮信号:
CustomButton::CustomButton(QWidget *parent)
{
button = new QPushButton();
icon = new QLabel(); //use a label to host the icon
line1 = new QLabel();
line2 = new QLabel();
connect(button, SIGNAL(clicked(bool)), this, SIGNAL(clicked()));
QHBoxLayout * hl = new QHBoxLayout();
hl->addWidget(icon);
QVBoxLayout * vl = new QVBoxLayout();
vl->addWidget(line1);
vl->addWidget(line2);
hl->addLayout(vl);
button->setLayout(hl);
QGridLayout * gl = new QGridLayout();
gl->addWidget(button);
setLayout(gl);
}
排列小部件的代码可以通过专用方法移动。
为什么不对QPushButton
或QAbstractButton
进行子类化,这似乎是合乎逻辑的选择?最实际的原因是:像setText
和setIcon
这样的方法在这个类中不再有意义(甚至是危险的)。最好通过安全代理公开标签和按钮方法(和信号),并且只公开所需的标签和按钮方法(和信号)。
- 使用一个考虑到std::map中键值的滚动或换行的键
- 如何防止clang格式在流运算符调用之间添加换行符<<
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 在 Stream C++ 文本之前有一个额外的换行符
- 流:CSV 文件中的换行符
- 将缓冲区复制到剪贴板 [换行错误]
- 如何在三元条件运算符中添加换行符和连接? :在 C++ 中
- Clang-格式:在多行语句之后的换行符上打开大括号
- 如何正确转发/换行static_cast?
- 在输出流中插入换行符
- 防止控制台在通道字符(在 c++ 中)中输入空格(即空格、制表符和换行符)
- QProcess::readAllStandardOutput() 和换行符
- 如果有换行符,clang 格式不会附加大括号
- 创建一个简单的前向迭代器,该迭代器在循环缓冲区的"end"处自动换行
- C++在标点符号后将字符串换行
- 提取后返回换行符的C++istream.get()
- 如何在出现换行符之前将多个整数作为输入?
- 正则表达式 获取两个换行符之间的文本
- 创建一个 2 行(不换行)的 QPushButton
- QPushButton工具提示插入一个换行符而不需要我指定它