在Qt中,要创建一组链接的按钮,可以在其中使用QButtonGroup带有可检查按钮的a 。
请注意,该类不是可视容器,您需要使用常规布局技术自己对按钮(或其他任何东西)进行布局。(另一种选择是QGroupBox,它确实具有视觉外观。)
使用组框和样式表来实现此效果相对简单。
#include <QtGui>
// For Qt 5:
// #include <QtWidgets>
static QString strip_normal(
"QPushButton {"
" margin: 0; padding: 10px; border: 0px;"
" background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,"
" stop: 0 #f6f7fa, stop: 1 #aaabae);"
"}");
static QString strip_checked(
"QPushButton:checked {"
" background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,"
" stop: 0 #aaabae, stop: 1 #f6f7fa);"
"}");
static QString strip_first(
"QPushButton{"
" border-top-left-radius: 6px;"
" border-bottom-left-radius: 6px;"
"}");
static QString strip_last(
"QPushButton{"
" border-top-right-radius: 6px;"
" border-bottom-right-radius: 6px;"
"}");
static QString widget_back(
"QWidget {"
" background: black;"
"}");
Run Code Online (Sandbox Code Playgroud)
取自QPushButton样式示例的渐变,略有调整。
class W: public QWidget
{
Q_OBJECT
public:
W(QWidget *parent = 0)
: QWidget(parent)
{
/* style sheet applies to this widget and its children */
setStyleSheet(widget_back+strip_normal+strip_checked);
/* First and last widget need special borders */
QPushButton *one = createButton("one", true, strip_first);
QPushButton *two = createButton("two", false);
QPushButton *thr = createButton("three", false, strip_last);
/* Button group for button selection handling */
QButtonGroup *bg = new QButtonGroup;
bg->addButton(one);
bg->addButton(two);
bg->addButton(thr);
/* Layout with no spacing */
QHBoxLayout *hl = new QHBoxLayout;
hl->addWidget(one);
hl->addWidget(two);
hl->addWidget(thr);
hl->setSpacing(0);
setLayout(hl);
}
QPushButton *createButton(QString const& name,
bool checked,
QString const& sheet = QString())
{
QPushButton *pb = new QPushButton(name);
pb->setCheckable(true);
pb->setChecked(checked);
if (!sheet.isEmpty())
pb->setStyleSheet(sheet);
return pb;
}
};
Run Code Online (Sandbox Code Playgroud)
这看起来像下面的屏幕截图(取决于您的操作系统和您可能具有的Qt自定义设置):
Linux,无任何样式:

样式表如上面的代码所示:

取决于“控件”所具有的语义的其他替代方法可能会对您有所帮助:QTabBar选项卡是选项卡式窗口(选项卡选择器)中的顶部小部件。