小编cbu*_*art的帖子

在 QLineEdit 中只写入浮点值

如何写入QLineEdit(0.0 - 5.0) 范围内的浮点数?我使用 qregexp 来完成这样的任务,例如QRegExp a("([a-zA-Z]{3,30})")写入用户名,但不知道写入浮点数。

c++ qt qregexp

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

Moc'ed 文件被神秘地排除在 Visual Studio 项目之外

我有几个使用 Qt Visual Studio 工具创建的 Visual Studio 项目(在项目创建时总是可用的最新版本,一些可以追溯到支持 Qt 5 的第一个版本,现在是 2.2.1)。所有项目都是用 VS 2010 编译的,尽管 IDE 是 VS 2017(到目前为止是 15.7.4)。

从一段时间开始,一些项目开始报告链接错误,例如

错误 LNK2001:未解析的外部符号“公共:静态结构 QMetaObject const MyQtClass::staticMetaObject”(?staticMetaObject@MyQtClass@@2UQMetaObject@@B)

对于此示例,MyQtClass.h文件声明MyQtClass并具有Q_OBJECT宏。MyQtClass.cpp定义方法。

经过快速检查,我发现问题来自相关的 moc 文件(moc_MyQtClass.cpp如上例)被排除在当前配置的编译之外。这里是 .vcxproj 文件的摘录:

<ClCompile Include="GeneratedFiles\Debug\moc_MyQtClass.cpp">
  <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
  <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_MyQtClass.cpp">
  <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</ClCompile>
Run Code Online (Sandbox Code Playgroud)

如果我修改 .vcxproj 文件以从 Debug 配置中删除排除项,则该项目可以正常工作。

该问题仅在与ed 类关联的.cpp 文件Q_OBJECT被修改时发生(MyQtClass.cpp在我的示例中)。保存此类文件时,会修改 .vcxproj 文件并添加排除项。

这个问题不会出现在我拥有的每个 Qt 项目中,但是一旦它开始,它就会在每次修改关联的 .cpp 文件时不断出现。我一直无法发现它的模式。另外,在公司的几个开发系统中都发生过,所以我的电脑好像不是问题。

我发现的唯一解决方法是丢弃项目文件中的更改,但 …

c++ qt visual-studio qt-vs-addin

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

在尊重样式的同时从禁用的QComboBox中删除箭头

在下图中,第一个QComboBox是禁用的:

在此输入图像描述

我想强调的是,通过删除禁用QComboBoxes 的箭头无法更改该值.

我已经尝试修改已用于的样式表:

QComboBox::down-arrow:disabled {
  border: 0;
  background: transparent;
  image: none;
  height: 0;
  width: 0;
}
Run Code Online (Sandbox Code Playgroud)

但它没有解决问题并与我当前的风格冲突(设置使用qApp->setStyle("fusion")):

在此输入图像描述

我怎么才能得到它?

c++ qt qcombobox

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

如何在 Notepad++ 中禁用看似随机的语法高亮

任何人都可以建议:

  1. 为什么会这样突出呢?我似乎没有做任何事情来激活它:

截屏

  1. 如何禁用它?

syntax-highlighting notepad++

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

使用迭代器从QStringlist中删除项目

我试图遍历a QStringList,打印字符串,然后从列表中删除它.我似乎无法找到一个有效的QStringList方法!例如:

for ( QStringList::Iterator it = commandList.begin(); it != commandList.end(); ++it ) {
    out << "Processed command: " << *it << endl;
    *it.erase();
}
Run Code Online (Sandbox Code Playgroud)

给出编译错误:'QList :: Iterator'没有名为'erase'的成员

  1. 如何删除迭代器当前指向的项目?
  2. 在循环中将其移除是否安全?(因为++it如果我在列表中途删除项目可能会失败)

c++ qt iterator qtcore qstringlist

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

滥用 c++11 unique_ptr 在离开作用域时执行代码

我想使用std::unique_ptr的删除器来保证一些代码会在离开作用域时执行。例如,假设我有一个Event带有 function的类set_event()

我想确保在离开范围时,my_event.set_event()将调用该函数。我设法得到了类似的东西:

Event my_event;
auto releasing_function = [&my_event] (void*){my_event.set_event();};
std::unique_ptr<void, decltype(releasing_function)> safe_event((void*)1, releasing_function);
Run Code Online (Sandbox Code Playgroud)

但我觉得我们可以做得更好。也许是一个没有这个自动 lambda 函数的单行,或者避免这个丑陋的(void*)1. 甚至可能完全删除unique_ptr

编辑:我想避免实用程序类。这太容易了:)

c++ unique-ptr c++11

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

如何在启用/禁用 QComboBox/QSpinBox 时停止发出信号?

我有一个小型 Qt 绘图应用程序,并且我正在基于“主”组合框启用/禁用小部件(组合/旋转框)。例如,假设主设备是,它会根据combo1更改 中的条目,启用/禁用,并为选择中的某个条目设置一个值。不过,还有更多的小部件。combo2currentIndex()spin1spin1combo1

在聊天中(及以后)的小讨论之后,我使用了Qt::QueuedConnectionevery connect(),但这并没有阻止重新启用的小部件在重新启用时发出信号。这导致我connect()对所有重新启用的小部件都执行了许多操作,从而导致了多次绘图,这是我想避免的。就像现在一样,(几乎)所有小部件都plot()在 a 内部使用connect(),因此它是一个插槽的多个信号。

我的问题:有没有办法防止在重新启用小部件时发出信号?我可以plot()使用一些bool来检查绘图是否已执行并阻止相同类型的进一步操作,但这仍然会导致小部件发出信号并运行plot(),即使检查会阻止实际绘图,但这并不会这似乎不是可行的办法。我还希望避免运行installEventFilter()或类似的操作,因为这很可能会比之前的修复速度更慢。

c++ qt

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

C++ Qt GUI更新

我是Qt的新手,因此我遇到了GUI更新问题.我有2个类:ControlWidget在主线程和CameraController单独的线程中.

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    CameraController *cameraController = new CameraController;;
    ControlWidget *main_window = new ControlWidget;
    Thread getImageThread; 
    cameraController->moveToThread(&getImageThread);
    getImageThread.start();
    QTimer get_images_timer;
    QObject::connect(&get_images_timer, SIGNAL(timeout()), cameraController, SLOT(onTimerOut()), Qt::QueuedConnection);
    QObject::connect(cameraController, SIGNAL(sendLabel(QImage)), main_window, SLOT(getImage(QImage)), Qt::QueuedConnection);
    QObject::connect(&get_images_timer, SIGNAL(timeout()), main_window, SLOT(update()), Qt::QueuedConnection);
    get_images_timer.start(2000);
    app.exec();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

因此,每2秒我想从相机线程获取图像并将它们发送到主线程(动作发生,所以我QImage在main_window对象).然后我想把这个QImage放到cam1和cam2上QLabel.在这里我被困住了:

第一:当我使用setPixmap()方法QLabel.width()QLabel.height()不同,那么image.width()image.height()pixmap.width()pixmap.height().

第二:我无法想象QLabel.如果我什么this->ImageLayout->addWidget(cam1)都不做的话.this->update也没有帮助.

我有一个额外的GUI更新工作者吗?我究竟做错了什么?

源代码以获取更多信息:

CameraController.h …

c++ qt

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

使用 back_inserter 从结构的单个成员创建向量

我想知道是否可以使用std::back_inserter从更复杂的结构中创建仅包含单个元素的向量。例如,在以下代码中:

struct Person {
  std::string first_name;
  std::string last_name;
  int id;
};
std::vector<Person> people;
// Populate 'people'...

// Extract last names into single vector
std::vector<std::string> last_names;
std::copy(begin(people), end(people), std::back_inserter(last_names)); // <... ?
Run Code Online (Sandbox Code Playgroud)

到目前为止,我发现的唯一解决方案是创建一个强制转换运算符Person -> std::string

struct Person {
  // ...
  operator std::string() const { return last_name; }
};
Run Code Online (Sandbox Code Playgroud)

但是,如果我想将first_name和提取last_name到两个向量中,这不是一个好的解决方案,更不用说晦涩难懂的隐式转换了。

有什么方法可以指示std::back_inserter如何构造要插入的元素?任何其他方式来创建这样的向量?显然,我不是指原始方式:

std::vector<std::string> last_names;
last_names.reserve(people.size());
for (const auto& person : people) {
  last_names.push_back(person.last_name);
}
Run Code Online (Sandbox Code Playgroud)

但对于一些<algorithm>类似的人 ;)

我更喜欢仅使用 C++ 的答案,但如果需要,我愿意接受 Boost 解决方案。

c++ copy stl-algorithm

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

Gitlab-将父管道的作业ID传递给子管道

有什么方法可以将父管道的作业 ID 作为变量传递给子管道

package:
  stage: package                 
  script:
    - zip -r ./service.zip

deploy:
  stage: deploy
  variables:
    
  trigger:         
    include:
      - project: '<namespace>/<project>'
        ref: '<branch>'
        file: '<path to yml file>'
    strategy: depend    
Run Code Online (Sandbox Code Playgroud)

gitlab gitlab-ci

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