小编Ste*_*hen的帖子

使用初始化列表(C++)初始化父的受保护成员

是否可以使用子类的构造函数的初始化列表来初始化在父类中声明为protected的数据成员?我无法让它发挥作用.我可以解决它,但如果我不必这样做会很好.

一些示例代码:

class Parent
{
protected:
    std::string something;
};

class Child : public Parent
{
private:
    Child() : something("Hello, World!")
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

当我尝试这个时,编译器告诉我:"类'Child'没有任何名为'something'的字段".这样的事情可能吗?如果是这样,语法是什么?

非常感谢!

c++ inheritance constructor initialization-list

128
推荐指数
3
解决办法
4万
查看次数

WPF Window.Close()不会触发UserControl.Unloaded事件

我有一个包含自定义UserControl的窗口.UserControl需要知道何时关闭包含它的Window,以便它可以终止一个线程.

我最好的猜测是如何实现这一点是处理UserControl的Unloaded事件.但是,Unloaded事件似乎仅在用户实际单击以关闭窗口时触发,而不是在我以编程方式调用窗口上的Close()方法时触发.

为了便于参考,以下是我的代码的一些相关部分.

MyWindow.xaml:

<Window x:Class="Namespace.MyWindow"
        xmlns:controls="clr-namespace:Namespace.Controls">
    <controls:MyControl/>
</Window>
Run Code Online (Sandbox Code Playgroud)

MyControl.xaml:

<UserControl x:Class="Namespace.Controls.MyControl"
             Unloaded="UserControl_Unloaded"/>
    <!-- Stuff -->
</UserControl>
Run Code Online (Sandbox Code Playgroud)

MyControl.xaml.cs:

void UserControl_Unloaded(object sender, RoutedEventArgs e)
{
    // Stop the thread.
}
Run Code Online (Sandbox Code Playgroud)

所以回顾一下,当我关闭"手动"窗口(alt-F4,单击红色"X"等)时,上面的UserControl_Unloaded()方法被调用,但不是来自我调用的代码中的其他地方myWindow.Close().有任何想法吗?

wpf events user-controls

27
推荐指数
1
解决办法
4万
查看次数

使用样式表设置QGroupBox标题字体大小

我希望能够使用样式表设置QGroupBox标题的字体大小.我似乎无法弄明白.

根据我在这里读到的内容,我提出了以下代码.不幸的是,它不太有用.

groupbox->setStyleSheet(style)
Run Code Online (Sandbox Code Playgroud)

在哪里style:

QGroupBox::title
{
    subcontrol-origin: margin;
    subcontrol-position: top left;
    padding: 5 5px;
    font-size: 18px;
    font-weight: bold;
}
Run Code Online (Sandbox Code Playgroud)

所有这些风格元素似乎都被尊重,除了font-sizefont-weight.根据Qt Style Sheets Reference,所有尊重QWidget :: font的小部件都支持字体"属性".这不是QGroupBox标题的情况吗?

qt stylesheet qtstylesheets

18
推荐指数
1
解决办法
2万
查看次数

Qt MOC文件名冲突使用多个.pri文件

为了保持我的Qt项目有点组织(使用Qt Creator),我有一个.pro文件和多个.pri文件.就在最近,我在我的一个.pri文件中添加了一个类,该文件的文件名与已经存在于单独的.pri文件中的类相同.

qmake生成的文件结构和makefile似乎无视随后发生的文件名冲突.生成的moc_*文件全部被抛入同一个子目录(根据发布或调试),最终会覆盖另一个.当我尝试制作项目时,我收到几个警告,如下所示:

Makefile.Release:318: warning: overriding commands for target `release/moc_file.cpp`
Run Code Online (Sandbox Code Playgroud)

该项目无法链接.

这是我正在谈论的一个简单的例子.

目录结构:

+ project_dir
| + subdir1
| | - file.h
| | - file.cpp
| + subdir2
| | - file.h
| | - file.cpp
| - main.cpp
| - project.pro
| - subdir1.pri
| - subdir2.pri

project.pro的内容:

TARGET = project
TEMPLATE = app
include(subdir1.pri)
include(subdir2.pri)
SOURCES += main.cpp
Run Code Online (Sandbox Code Playgroud)

subdir1.pri的内容:

HEADERS += subdir1/file.h
SOURCES += subdir1/file.cpp
Run Code Online (Sandbox Code Playgroud)

subdir2.pri的内容:

HEADERS += subdir2/file.h
SOURCES += subdir2/file.cpp
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉qmake生成一个系统,将moc_*文件从单独的.pri文件放入单独的子目录?

qt qmake

7
推荐指数
1
解决办法
2045
查看次数

从新源重新加载 boost::program_options 中的选项值

我刚刚开始boost::program_options第一次深入研究。我非常喜欢它。然而,我试图用它来完成的事情似乎并不是它的设计者所考虑的。

我想用来boost::program_options解析命令行选项和配置文件。到现在为止还挺好。此外,我希望能够检查更新的设置(例如来自新的配置文件),这些设置可以覆盖我的 variables_map 中先前解析的设置。

当然,我可以做一个单独的解析并尝试合并两个地图。也许这就是我最终要做的事情。不过,我只是想知道,是否有人以前做过类似的事情并提出了一个巧妙的解决方案。

c++ boost-program-options

5
推荐指数
0
解决办法
620
查看次数

在QScrollArea中的QVBoxLayout中为最初隐藏的窗口小部件保留空间

我正在使用QVBoxLayout来安排垂直堆栈的小部件.QVBoxLayout包含在QScrollArea中.我希望最初隐藏一些小部件,并且仅在选中复选框时显示.这是我正在使用的代码的示例.

MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
    QVBoxLayout *layout = new QVBoxLayout(this);

    QLabel *labelLogTypes = new QLabel(tr("Log Types"));

    m_checkBoxCsv = new QCheckBox(tr("&Delimited File (CSV)"));
    m_labelDelimiter = new QLabel(tr("Delimiter:"));
    m_lineEditDelimiter = new QLineEdit(",");
    checkBoxCsv_Toggled(m_checkBoxCsv->isChecked());
    connect(m_checkBoxCsv, SIGNAL(toggled(bool)), SLOT(checkBoxCsv_Toggled(bool)));

    QHBoxLayout *layoutDelimitedChar = new QHBoxLayout();
    layoutDelimitedChar->addWidget(m_labelDelimiter);
    layoutDelimitedChar->addWidget(m_lineEditDelimiter);


    m_checkBoxXml = new QCheckBox(tr("&XML File"));
    m_checkBoxText = new QCheckBox(tr("Plain &Text File"));


    // Now that everything is constructed, put it all together
    // in the main layout.
    layout->addWidget(labelLogTypes);

    layout->addWidget(m_checkBoxCsv);
    layout->addLayout(layoutDelimitedChar);

    layout->addWidget(m_checkBoxXml);
    layout->addWidget(m_checkBoxText);

    layout->addStretch();
}


MyWidget::checkBoxCsv_Toggled(bool checked)
{
    m_labelDelimiter->setVisible(checked);
    m_lineEditDelimiter->setVisible(checked); …
Run Code Online (Sandbox Code Playgroud)

layout qt visibility

3
推荐指数
1
解决办法
2777
查看次数