有没有办法将Q_DECLARE_METATYPE()与枚举类类型一起使用?我知道旧的枚举工作,但这些新的,强类型的?其他地方找不到关于这个问题的任何事情 我正在使用最新的Qt版本.
例:
enum Foo
{
A,
B,
C
};
Q_DECLARE_METATYPE(Foo)
QVariant var = Foo::A; // works fine
enum class Bar
{
X,
Y,
Z
};
Q_DECLARE_METATYPE(Bar)
QVariant var = Bar::X; // doesn't compile
Run Code Online (Sandbox Code Playgroud) 我想在每次启动程序时删除日志文件,而不是追加它.我尝试过使用cleanHistoryOnStart属性,但这似乎没有任何效果.我可能在这里遗漏了一些东西.
如果重要的话,我在Linux上使用Eclipse.
<?xml version="1.0" encoding="utf-8"?>
<configuration scan="true" scanPeriod="10 seconds">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{dd.MM.yyyy. HH:mm:ss} %level [%thread] %logger{20} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>chat.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>chat.log.%d{yyyy-MM-dd}</fileNamePattern>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder>
<pattern>%d{dd.MM.yyyy. HH:mm:ss} %level [%thread] %logger{20} - %msg%n</pattern>
</encoder>
<Encoding>utf-8</Encoding>
</appender>
<logger name="src" additivity="false" level="ALL">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</logger>
<root level="OFF">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud) 当我运行它时,此代码拒绝将适当的消息打印到控制台.使用指针而不是引用似乎工作( - >而不是.).我是OOP的新手,请原谅我,如果你觉得这太荒谬了.
#include <iostream>
using namespace std;
class instrument {
public:
virtual void play(){}
};
class drum : public instrument {
public:
void play(){
cout << "dum, dum" << endl;
}
};
class piano : public instrument {
public:
void play(){
cout << "pling" << endl;
}
};
int main (){
instrument i;
piano p;
drum d;
instrument &pi = i;
pi.play(); // -
pi = p;
pi.play(); // pling
pi = d;
pi.play(); // dum, dum
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Qt中编写战舰的实现,我正在使用两个QGridLayouts来包含用于表示玩家网格的QToolButtons.顶级布局(QMainWindows one)是QHBoxLayout.我想要完成的是删除这些按钮之间的间距.这就是它当下的样子:

它绝对不漂亮.我在这些布局中添加项目,如下所示:
QIcon icon;
icon.addFile(QStringLiteral(":/images/Resources/field_blue.png"), QSize(), QIcon::Normal, QIcon::Off);
for (int i = 0; i < dimensions; ++i)
{
for (int j = 0; j < dimensions; ++j)
{
QToolButton* buttonLeft = new QToolButton(this);
buttonLeft->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
buttonLeft->setText(QString::number(i) + "-" + QString::number(j));
buttonLeft->setFixedSize(FIELD_ICON_SIZE + 10, FIELD_ICON_SIZE + 10); // FIELD_ICON_SIZE -> 20
buttonLeft->setIcon(icon);
buttonLeft->setIconSize(QSize(FIELD_ICON_SIZE, FIELD_ICON_SIZE));
buttonLeft->setAutoRaise(true);
QToolButton* buttonRight = new QToolButton(this);
buttonRight->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
buttonRight->setText(QString::number(i) + "-" + QString::number(j));
buttonRight->setFixedSize(FIELD_ICON_SIZE + 10, FIELD_ICON_SIZE + 10);
buttonRight->setIcon(icon);
buttonRight->setIconSize(QSize(FIELD_ICON_SIZE, FIELD_ICON_SIZE));
buttonRight->setAutoRaise(true);
_ui.gridLayoutLeft->addWidget(buttonLeft, i, j);
_ui.gridLayoutRight->addWidget(buttonRight, i, …Run Code Online (Sandbox Code Playgroud) 我有一个类方法,它与一个对象的副本一起工作(确切地说是*).泄漏发生在重载的赋值运算符中 - 无论如何,这就是Visual Leak Detector所说的.我正在做的是使用副本,如果完成的工作是令人满意的,我将新创建的对象复制回来.我还实现了自定义析构函数,复制构造函数和赋值运算符,因为问题出现在动态分配的内存中.我使用C++的经验非常有限,因此代码中可能存在一些恶意内容.
如果需要,我会提供更多信息.
问题方法:
bool Grid::SurroundShipSquares(int top, int bottom, int left, int right)
{
// copying itself
Grid gridCopy(*this);
Square** squaresCopy = gridCopy.GetSquares();
for (int i = top; i <= bottom; ++i)
{
for (int j = left; j <= right; ++j)
{
if (squaresCopy[i][j].GetState() != SquareState::Vacant)
return false;
(squaresCopy[i][j]).SetState(SquareState::Unoccupiable);
}
}
// the problem occurs here
*this = gridCopy;
return true;
}
Run Code Online (Sandbox Code Playgroud)
复制构造函数:
Grid::Grid(const Grid& source)
{
_position = source._position;
_size = source._size;
int dimensions = …Run Code Online (Sandbox Code Playgroud) c++ memory-leaks operator-overloading copy-constructor assignment-operator
我有一个QGridLayout,其中包含常量的行和列,其中包含QToolButton的实例.我想要做的是访问此布局中的对象,其位置由其坐标确定.我知道有QGridLayout :: - > itemAtPosition(row,column)返回一个指向QLayoutItem的指针,但是一旦我将它转换为QToolButton(很明显),并尝试更改其中的内容我得到访问冲突异常.
这就是我试图将QLayoutItem*转换为QToolButton*的方法:
QToolButton* button = dynamic_cast<QToolButton*>(_ui.gridLayoutLeft->itemAtPosition(x, y)); // gridLayoutLeft is of type QGridLayout*
Run Code Online (Sandbox Code Playgroud)
static_cast给了我一个"无效的类型转换"错误.可以做些什么来实现这种行为?
我正在使用VS 2013和最新的Qt.
我有一个托管在我的本地IIS(而不是Express)上的WCF Web服务.我在其根目录中包含了一个Global.asax,它应该在那里.由于我使用Ninject与WCF扩展,类全球扩展,而不是一个HttpApplication NinjectHttpApplication(如看到这里).另外,我正在使用AutoMapper库来规避编写无聊的样板代码.出现这个问题的原因是我没有调用我为配置AutoMapper定义的静态方法,导致AutoMapper在调用Mapper.Map()时抛出异常.静态方法的调用是在Global.asax的Application_Start()方法中定义的,因为我希望每个Web服务的生命周期执行一次这些映射.顺便说一句,Ninject的CreateKernel()方法被调用就好了.我在这里错过了什么吗?我已经尝试过调试它,即使我已经将调试器附加到w3wp.exe并尝试在其正文中调用一个显式的Debugger.Break()调试,它也没有达到断点.
到目前为止它是这样的:
Global.asax中
<%@ Application Codebehind="Global.asax.cs" Inherits="MyApp.WebHost.Global" Language="C#" %>
Run Code Online (Sandbox Code Playgroud)
的Global.asax.cs
public class Global : NinjectHttpApplication
{
protected override IKernel CreateKernel()
{
IKernel kernel = new StandardKernel();
/* various bindings */
return kernel;
}
protected void Application_Start(object sender, EventArgs e)
{
AutoMapperConfig.RegisterMappings();
}
/* rest of Global.asax methods (Session_Start, Application_BeginRequest, etc.) with empty bodies */
Run Code Online (Sandbox Code Playgroud)
RegisterMappings方法
public static class AutoMapperConfig
{
public static void RegisterMappings()
{
/* multiple calls to Mapper.CreateMap() */
Mapper.AssertConfigurationIsValid();
}
}
Run Code Online (Sandbox Code Playgroud)
Svc文件标记
<%@ …Run Code Online (Sandbox Code Playgroud) 我有一个ItemsControl控件,它有一个ObservableCollection作为其ItemsSource.它还有一个位于DataTemplate内部的按钮.按钮的Command属性绑定到ViewModel中的RelayCommand(我使用的是MVVM Light),CommandParameter绑定到ItemsSource中的相应项.
问题是由于某种原因,命令永远不会触发.另一方面,代码隐藏工作正常.调试鼠标单击事件处理程序时,我可以看到发送方(类型为Button)的CommandParameter填充了正确的数据,而Command为null.
我在这里想念的是什么?
XAML:
<ItemsControl ItemsSource="{Binding Users}"
Margin="{StaticResource ContentMargin}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Margin="{StaticResource ImageButtonMargin}"
Style="{StaticResource ImageButtonStyle}"
Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}, Path=DataContext.UserSelectedCommand}"
CommandParameter="{Binding}">
<!--...-->
Run Code Online (Sandbox Code Playgroud)
视图模型:
private ObservableCollection<User> _users;
private RelayCommand<User> _userSelectedCommand;
public ObservableCollection<User> Users
{
get { return _users; }
set
{
_users = value;
RaisePropertyChanged();
}
}
public RelayCommand<User> UserSelectedCommand
{
get { return _userSelectedCommand; }
}
protected override sealed void SetCommands() // called in the constructor which is in turned called …Run Code Online (Sandbox Code Playgroud) 我有一个向量填充自定义类型的值,并且find()算法抱怨它无法为值比较找到合适的==运算符.我已经实现了这样:
bool Ship::operator==(const Ship& source) {
return (_type == source._type &&
_damagedSquares == source._damagedSquares &&
_orientation == source._orientation && _state == source._state);
}
Run Code Online (Sandbox Code Playgroud)
我也尝试了"朋友"方法,但这也不起作用.类本身的结构如下:
class Ship {
private:
ShipType _type;
int _damagedSquares;
ShipOrientation _orientation;
ShipState _state;
public:
Ship();
Ship(ShipType type);
~Ship();
bool operator==(const Ship& source);
};
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
附加信息:
std::vector<Ship> remainingShips;
MultiArray& squares = opponentGridCopy.GetSquares();
for (RowIterator rowIterator = squares.begin(); rowIterator != squares.end();
++rowIterator) {
for (ColumnIterator columnIterator = rowIterator->begin();
columnIterator != rowIterator->end(); ++columnIterator) {
Square* current = &(*columnIterator);
SquareState currentState …Run Code Online (Sandbox Code Playgroud) c++ ×6
qt ×3
automapper ×1
c# ×1
enum-class ×1
global-asax ×1
inheritance ×1
java ×1
logback ×1
memory-leaks ×1
mvvm ×1
ninject ×1
reference ×1
vector ×1
wcf ×1
wpf ×1