我不明白以下代码的结果:
#include <stdio.h>
#include <conio.h>
int main()
{
int a[4]={1, 3, 5, 6};
//suppose a is stored at location 2010
printf("%d\n", a + 2);
printf("%d", a++);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么第二个printf函数会产生以下错误?
error: lvalue required as increment operand
这在C语言中有效吗?
#include <stdio.h>
int main()
{
int i = 5;
int a[i]; // Compiler doesn't give error here. Why?
printf("%d",sizeof(a)); //prints 5 * 4 =20. 4 is the size of integer datatype.
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器不会在声明中给出错误int a[i];.我不是一个常数,那么它怎么能成功编译?是因为我使用的是gcc编译器吗?是否允许在C++中使用?
我想检测是否按下了一个键序列,并希望在Qt中对该事件执行某个任务.目前,我可以检测某些小部件的按键,但如何检测全局按键.全局我的意思是,即使应用程序被最小化或隐藏,它也应该检测按键.
我尝试eventFilter为应用程序制作一个,首先QObject::eventFilter像这样重载:
bool GlobalEventFilter::eventFilter(QObject *Object, QEvent *Event)
{
if (Event->type() == QEvent::KeyPress)
{
QKeyEvent *KeyEvent = (QKeyEvent*)Event;
switch(KeyEvent->key())
{
case Qt::Key_F1:
cout<<"F1 press detected"<<endl;
return true;
default:
break;
}
}
return QObject::eventFilter(Object,Event);
}
Run Code Online (Sandbox Code Playgroud)
然后安装该对象作为eventFilter我的应用程序:
QApplication a(argc,argv);
a.installEventFilter(new GlobalEventFilter());
Run Code Online (Sandbox Code Playgroud)
我也试过这样做:
QCoreApplication::instance()->installEventFilter(new GlobalEventFilter());
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我都可以在应用程序窗口打开时检测按键,但在窗口最小化或隐藏时失败.怎么解决这个?
我正在使用MediaController.MediaPlayerControl以在我的自定义视图底部显示MediaController,但我无法让它正常工作.当我第一次播放音乐时,应该有暂停按钮可见,但是有播放,当我按下那个按钮时,音乐正确暂停,状态保持不变,之后它正常工作.此外,当我播放下一首歌曲时,旧的MediaController小部件与新的小部件重叠.有时,在播放音乐时,进度/搜索栏不会刷新.它只是在按下MediaController上的某些内容时自动更新(播放/暂停,转发等).
我发现这些问题与我的相似,但我认为他们得到的答案不会解决我的问题.
这是我初始化控制器的方式:
private void setController()
{
controller = new MusicController(this);
controller.setPrevNextListeners(new View.OnClickListener() {
@Override
public void onClick(View v) {
playNext();
}
}, new View.OnClickListener() {
@Override
public void onClick(View v) {
playPrev();
}
});
controller.setMediaPlayer(this);
controller.setAnchorView(findViewById(R.id.song_list));
controller.setEnabled(true);
}
Run Code Online (Sandbox Code Playgroud)
这是我显示控制器的方式:
public void playMusic()
{
musicSrv.playSong(); //Play song in a service
setController();
controller.show(0);
controller.requestFocus();
}
Run Code Online (Sandbox Code Playgroud) 以下语句打印'A'.为什么?"A"的ASCII码是不是65?
cout<<char(1857);
Run Code Online (Sandbox Code Playgroud)
1857年是否会与演员一起变成65岁?我正在使用int_type get()方法从fstream中读取字符,并为'A'获取类似1857的奇怪值,为'B'获取1858等等.
这是我的代码:
int ch;
while(file) // file is fstream.
{
ch = file.get();
cout<<char(ch)<<":"<<ch<<" "; /*prints A:1857 B:1858 C:1859*/
}
Run Code Online (Sandbox Code Playgroud)
注意:将int转换为char将其截断为8位,因此将1857转换为65.但是为什么get()方法返回1857而不是65?
我想使用C++监视Windows中文件的添加和重命名.我在Google上搜索但无法找到任何有用的信息.
我愿意使用Winapi,boost或Qt.